Xamarin.Android: 包 XX 与 monoandroid81 (MonoAndroid,Version=v8.1) 不兼容
Xamarin.Android: Package XX is not compatible with monoandroid81 (MonoAndroid,Version=v8.1)
我在 Visual Studio Windows 的 Xamarin.Android 项目中遇到了陌生行为.
我创建了一个新的 Android 空白项目,我尝试安装 NuGet 包 "AForge"(数学图书馆),但我收到以下错误消息:
Package AForge 2.2.5 is not compatible with monoandroid81
(MonoAndroid,Version=v8.1).
在重新启动 Visual Studio 和计算机后,我已经尝试重新创建几个项目,但问题仍然存在。
但是,如果我在 Mac 上做同样的事情,通过 Visual Studio 为 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
/define:DEBUG;TRACE;XAMARIN_ANDROID_v1_0;MOBILE;ANDROID;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): error CS0246: The type or namespace
name 'AForge' could not be found (are you missing a using directive or
an assembly reference?)
[/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj] Done
Building Project
"/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj"
(PackageForAndroid target(s)) -- FAILED.
所以我尝试了你的建议,但是当我尝试保存包时出现错误:
a local file header is corrupted'
你还有什么建议吗?
Would you have any explanation about this issue?
可以获取官方文档 here:
Description: With PackageReference, assemblies present at the root of
lib folder without a target framework specific sub-folder are ignored.
NuGet looks for a sub-folder matching the target framework moniker
(TFM) corresponding to the project’s target framework and installs the
matching assemblies into the project.
在这种情况下,NuGet 会考虑将此包安装到与 monoandroid81 不兼容的 .NET Framework 中。然后你会那个错误 "Package AForge 2.2.5 is not compatible with monoandroid81".
要解决此问题,最好的方法是联系 AForge NuGet 包的作者更新此包,或者您也可以直接将参考 dll 文件添加到您的项目。
此外,如果您仍然想使用 nuget 来管理这个包,我想为您提供一个解决此问题的方法:
从 nuget.org 下载这个 nuget 包。
复制下载包,重命名为.zip
,如aforge.2.2.5 - Copy.nupkg.zip
,然后解压。
用NuGet Package Explorer(Microsoft store获取)打开包aforge.2.2.5.nupkg
,在lib节点下添加一个新文件夹MonoAndroid81
,添加已存在的文件AForge.dll 和 AForge.xml 从复制文件夹 aforge.2.2.5 - Copy.nupkg.zip
,保存这个 nuget 包。
将这个新创建的 nuget 包添加到 nuget 本地提要,然后将这个 nuget 包添加到项目中。添加包之前,请不要忘记删除 C:\Users\<UserName>\.nuget\packages\aforge
中的 nuget 包缓存。
希望这对您有所帮助。
我在 Visual Studio Windows 的 Xamarin.Android 项目中遇到了陌生行为.
我创建了一个新的 Android 空白项目,我尝试安装 NuGet 包 "AForge"(数学图书馆),但我收到以下错误消息:
Package AForge 2.2.5 is not compatible with monoandroid81 (MonoAndroid,Version=v8.1).
在重新启动 Visual Studio 和计算机后,我已经尝试重新创建几个项目,但问题仍然存在。
但是,如果我在 Mac 上做同样的事情,通过 Visual Studio 为 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 /define:DEBUG;TRACE;XAMARIN_ANDROID_v1_0;MOBILE;ANDROID;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): error CS0246: The type or namespace name 'AForge' could not be found (are you missing a using directive or an assembly reference?) [/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj] Done Building Project "/Users/vsts/agent/2.136.1/work/1/s/XxxApp/XxxApp.csproj" (PackageForAndroid target(s)) -- FAILED.
所以我尝试了你的建议,但是当我尝试保存包时出现错误:
a local file header is corrupted'
你还有什么建议吗?
Would you have any explanation about this issue?
可以获取官方文档 here:
Description: With PackageReference, assemblies present at the root of lib folder without a target framework specific sub-folder are ignored. NuGet looks for a sub-folder matching the target framework moniker (TFM) corresponding to the project’s target framework and installs the matching assemblies into the project.
在这种情况下,NuGet 会考虑将此包安装到与 monoandroid81 不兼容的 .NET Framework 中。然后你会那个错误 "Package AForge 2.2.5 is not compatible with monoandroid81".
要解决此问题,最好的方法是联系 AForge NuGet 包的作者更新此包,或者您也可以直接将参考 dll 文件添加到您的项目。
此外,如果您仍然想使用 nuget 来管理这个包,我想为您提供一个解决此问题的方法:
从 nuget.org 下载这个 nuget 包。
复制下载包,重命名为
.zip
,如aforge.2.2.5 - Copy.nupkg.zip
,然后解压。用NuGet Package Explorer(Microsoft store获取)打开包
aforge.2.2.5.nupkg
,在lib节点下添加一个新文件夹MonoAndroid81
,添加已存在的文件AForge.dll 和 AForge.xml 从复制文件夹aforge.2.2.5 - Copy.nupkg.zip
,保存这个 nuget 包。将这个新创建的 nuget 包添加到 nuget 本地提要,然后将这个 nuget 包添加到项目中。添加包之前,请不要忘记删除
C:\Users\<UserName>\.nuget\packages\aforge
中的 nuget 包缓存。
希望这对您有所帮助。