Как использовать мобильные службы Azure (с Xamarin. Auth)?Аутентификация?)?

#xamarin #azure-mobile-services #portable-class-library

#xamarin #azure-mobile-services #переносимая библиотека классов

Вопрос:

Итак, я создаю решение Forms, в мой проект PCL я добавляю NuGet Microsoft.WindowsAzure.Мобильный.

Когда я запускаю свой проект Android (который, конечно, ссылается на проект PCL), я получаю:

[MonoDroid] НЕОБРАБОТАННОЕ ИСКЛЮЧЕНИЕ: Система.Отражение.TargetInvocationException: Целью вызова было создано исключение. —> Система.Исключение InvalidOperationException: сборка Microsoft Azure Mobile Services для текущей платформы не найдена. Убедитесь, что текущий проект ссылается на оба Microsoft.WindowsAzure.Мобильные устройства и следующую сборку для конкретной платформы: Microsoft.WindowsAzure.Mobile.Ext.

Хорошо, отлично, я добавляю Microsoft.WindowsAzure.Ext (вручную отредактировав ссылки -> Перейдите к ..пакетам..Майкрософт.WindowsAzure.Мобильный.Извлекаю сборку и добавляю ее) в мой проект Android, но затем я получаю:

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.AndroidAccountStore / SecretAccount, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.AndroidAccountStore / SecretAccount, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.FormAuthenticatorActivity, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.FormAuthenticatorActivity, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.FormAuthenticatorActivity / State, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.FormAuthenticatorActivity / Состояние, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.WebAuthenticatorActivity, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.WebAuthenticatorActivity, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.WebAuthenticatorActivity / состояние, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.WebAuthenticatorActivity / Состояние, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

/Библиотека/Фреймворки/Mono.framework/Внешние /xbuild /Xamarin / Android / Xamarin.Android.Common.targets: Ошибка: найден дубликат управляемого типа! Сопоставления между управляемыми типами и типами Java должны быть уникальными. Первый тип: ‘Xamarin.Auth.WebAuthenticatorActivity / Client, Xamarin.Auth.Android, версия = 1.2.2.0, Культура = нейтральная, PublicKeyToken=null’; Второй тип: ‘Xamarin.Auth.WebAuthenticatorActivity / Клиент, Microsoft.WindowsAzure.Мобильный.Ext, версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken =31bf3856ad364e35’ (MyApp.Android)

Кажется, есть какой-то конфликт с Xamarin.Аутентификация?

Как мне решить эту проблему?

Комментарии:

1. Я не уверен насчет Xamarin. Аутентификация, но для использования Azure Mobile Services вы должны добавить AMS из NuGet в PCL и из Component store в Android project

2. Да, @xakz, это именно то, что я сделал.

3. я смог воспроизвести эту ошибку. Я думаю, что это серьезная проблема, я ожидал использовать Xamarin. Аутентификация с Azure в не столь отдаленном будущем. Я думаю, вам следует опубликовать отчет об ошибке bugzilla.xamarin.com

4. Привет, я член команды мобильных служб. SDK мобильных служб для Xamarin использует Xamarin Auth внутренне, и, похоже, проблема в том, что Xamarin. Android не допускает два типа с одинаковым пространством имен из двух разных сборок. Я изучу, что можно сделать в SDK, чтобы устранить потенциальный конфликт.

5. Спасибо @PaulBatum, тем временем я действительно создал ошибку с Xamarin: bugzilla.xamarin.com/show_bug.cgi?id=21147

Ответ №1:

Мне удалось найти обходной путь. Создайте переносимую библиотеку классов, в которую вы добавляете самородную версию мобильных служб. Таким образом, вы можете создать оболочку поверх существующих мобильных служб из pcl. Это явно работает, и это лучшее решение, пока ошибка не будет исправлена. Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь задавать.

Комментарии:

1. Я пробовал это, но я все еще получаю то же исключение (на iOS)

Ответ №2:

Эта ошибка устранена начиная с версии 1.2.5 SDK для мобильных служб.