Xamarin.Android:包XX与monoandroid81不兼容(MonoAndroid,Version = v8.1)

时间:2018-06-18 08:38:01

标签: visual-studio xamarin.android mono nuget nuget-package

我在 Windows上的Visual Studio 中遇到了 Xamarin.Android 项目的陌生行为。

我已经创建了一个新的 Android空白项目,我尝试安装 NuGet包“AForge”(数学库),但是我收到以下错误消息:

  

包AForge 2.2.5与monoandroid81不兼容   (MonoAndroid,版本= V8.1)。

在重新启动Visual Studio和计算机之后,我已经尝试重新创建了几个项目,但问题仍然存在。

但是,如果我在 Mac 上做同样的事情,通过 Visual Studio for Mac ,我没有遇到同样的问题:软件包安装得很好。

另外,我可以在package.config文件中看到该包与monodroid81很好地相关:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="AForge" version="2.2.5" targetFramework="monoandroid81" />
</packages>

您对此问题有任何解释吗?

更新:新问题

你好@Leo Liu-MSFT,当我遇到一个新问题时,我回到你身边。 dll副本在本地工作正常,但我在AppCenter上收到错误:

  

CoreCompile:
  /Library/Frameworks/Mono.framework/Versions/5.10.1/lib/mono/4.5/csc.exe   / noconfig / nowarn:1701,1702 / nostdlib + / errorreport:prompt / warn:4   /定义:DEBUG; TRACE;的 XAMARIN_ANDROID_v1_0 ; 移动机器人 ANDROID_1 ANDROID_2 ANDROID_3 ANDROID_4 ANDROID_5 ANDROID_6 ANDROID_7 ANDROID_8 ANDROID_9 ANDROID_10 ANDROID_11 ANDROID_12 ANDROID_13 ;的 ANDROID_14 ANDROID_15 ANDROID_16 ANDROID_17 ANDROID_18 ANDROID_19 ANDROID_20 ANDROID_21 ANDROID_22 ANDROID_23 ANDROID_24 ;的 ANDROID_25 ANDROID_26 ANDROID_27   /reference:/Library/Frameworks/Mono.framework/External/xbuild-frameworks/MonoAndroid/v1.0/Java.Interop.dll   /reference:/Users/vsts/.nuget/packages/microsoft.appcenter.analytics/1.7.0/lib/MonoAndroid403/Microsoft.AppCenter.Analytics.Android.Bindings.dll   /reference:/Users/vsts/.nuget/packages/microsoft.appcenter.analytics/1.7.0/lib/MonoAndroid403/Microsoft.AppCenter.Analytics.dll   /reference:/Users/vsts/.nuget/packages / ...   Services / AudioService.cs(8,7):错误CS0246:类型或命名空间   无法找到名称'AForge'(您是否错过了使用指令或   装配参考?)   [/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj]完成   建设项目   “/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj”   (PackageForAndroid target(s)) - FAILED。

所以我尝试了你的建议,但是当我尝试保存包时出现错误:

  

本地文件头已损坏'

你还有其他建议吗?

1 个答案:

答案 0 :(得分:3)

  

您对此问题有任何解释吗?

您可以获取官方文档 here

  

描述:使用PackageReference,程序集的根目录   没有特定于目标框架的子文件夹的lib文件夹将被忽略。   NuGet查找与目标框架名字对象匹配的子文件夹   (TFM)对应项目的目标框架并安装   将程序集匹配到项目中。

在这种情况下,NuGet会考虑将此软件包安装到.NET Framework,后者与monoandroid81不兼容。那么你将会出现错误“Package AForge 2.2.5与monoandroid81不兼容”。

要解决此问题,最好的方法是联系AForge NuGet软件包的作者来更新此软件包,或者您也可以将reference dll文件直接添加到您的项目

此外,如果您仍想使用nuget来管理此软件包,我想为您提供解决此问题的解决方法:

  1. nuget.org下载此nuget包。

  2. 复制下载包,使用.zip重命名,如aforge.2.2.5 - Copy.nupkg.zip,然后解压缩。

  3. 使用NuGet Package Explorer打开包aforge.2.2.5.nupkg(从Microsoft商店获取),在lib节点下添加新文件夹MonoAndroid81,添加存在文件AForge.dll和AForge.xml从复制文件夹aforge.2.2.5 - Copy.nupkg.zip中保存此nuget包。

  4. 将这个新的create nuget包添加到nuget本地feed,然后将此nuget包添加到项目中。不要忘记在添加包之前删除C:\Users\<UserName>\.nuget\packages\aforge中的nuget包缓存。

  5. 希望这有帮助。