Проблема Xamarin и библиотеки .NET Standard 2 - PullRequest
0 голосов
/ 01 июня 2018

Я создал кроссплатформенную библиотеку, которая имеет 3 реализации для каждой платформы:

  • Android
  • iOS
  • .NET Standard 2.0

Я упаковал библиотеку с Nuget в том же духе, что и проект кросс-платформенной библиотеки.

project layout

Теперь, когда я создаюновый проект Xamarin Forms и выберите .NET Standard в качестве средства для обмена кодом, я ссылаюсь на свой nuget и пытаюсь запустить его в симуляторе Android, я получаю:

/Library/Frameworks/Mono.framework/External/xbuild/Xamarin/Android/Xamarin.Android.Common.targets(2,2): Error: Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'SDK.NetStandard, Version=1.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'SDK.NetStandard.dll'
  at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference, Mono.Cecil.ReaderParameters parameters) [0x0009a] in /Users/builder/data/lanes/5945/342b2ce9/source/monodroid/external/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:229 
  at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference) [0x00000] in /Users/builder/data/lanes/5945/342b2ce9/source/monodroid/external/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:179 
  at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences (Java.Interop.Tools.Cecil.DirectoryAssemblyResolver resolver, System.Collections.Generic.ICollection`1[T] assemblies, Mono.Cecil.AssemblyDefinition assembly, System.Boolean topLevel) [0x0014a] in <fdfe8f54615a4e2ab24c72dc90da5c64>:0 
  at Xamarin.Android.Tasks.ResolveAssemblies.Execute (Java.Interop.Tools.Cecil.DirectoryAssemblyResolver resolver) [0x00237] in <fdfe8f54615a4e2ab24c72dc90da5c64>:0  (blank.Android)

Я дважды проверил иSDK.NetStandard.dll существует в пакете nuget.

Я также протестировал его, создав простое консольное приложение с .NET Core 2, и свойство библиотеки работает там.

[EDIT]

Я переименовал свой пакет из SDK в Matchmore.SDK, чтобы уменьшить путаницу. Ошибка выглядит так во время выполнения iOS.

System.IO.FileNotFoundException: Could not load file or assembly 'Matchmore.SDK.NetStandard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
  at blankstandard.App..ctor () [0x0001b] in /Users/lmlynik/Projects/blankstandard/blankstandard/App.xaml.cs:15
  at blankstandard.iOS.AppDelegate.FinishedLaunching (UIKit.UIApplication app, Foundation.NSDictionary options) [0x00007] in /Users/lmlynik/Projects/blankstandard/blankstandard.iOS/AppDelegate.cs:26
  at at (wrapper managed-to-native) UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr)
  at UIKit.UIApplication.Main (System.String[] args, System.IntPtr principal, System.IntPtr delegate) [0x00005] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.10.1.178/src/Xamarin.iOS/UIKit/UIApplication.cs:79
  at UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0002c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.10.1.178/src/Xamarin.iOS/UIKit/UIApplication.cs:63
  at blankstandard.iOS.Application.Main (System.String[] args) [0x00001] in /Users/lmlynik/Projects/blankstandard/blankstandard.iOS/Main.cs:17

Также после распаковкиnupkg вы можете увидеть, что DLL там.enter image description here

Ответы [ 3 ]

0 голосов
/ 08 июня 2018

https://bugzilla.xamarin.com/show_bug.cgi?id=43713 должен помочь вам.Это в основном предполагает, что вы используете msbuild вместо xbuild.

Если это невозможно, используйте этот обходной путь вместо

  1. Вместо добавления библиотеки .NET Standard, добавьте библиотеку PCL.
  2. Успешное выполнение проекта
  3. Удаление пакетов Nuget из библиотеки PCL
  4. Преобразование PCL в стандартную библиотеку .NET
  5. ДобавлениеПакеты Nuget возвращаются в стандартную библиотеку .NET
  6. Запустите проект еще раз.
  7. Проект должен успешно работать
0 голосов
/ 13 июня 2018

Visual Studio и .NET Core Tooling с .NET CLI ниже 2 не полностью поддерживают ссылки на сборки.Вам необходимо упаковать библиотеку и использовать ссылку на проект для решения.Причина в том, что требуемые сборки с их версиями разрешаются во время компиляции и затем записываются в файл JSON.При загрузке сборок библиотеки zour это может произойти сбой, поскольку они не могут найти нужную сборку или зависимости.

0 голосов
/ 06 июня 2018

Вам не хватает файла SDK.NetStandard.dll.Зайдите в Nuget и и установите / обновите NETStandard.Библиотека, Решение -> Управление пакетами Nuget для решения . enter image description here

...