Xamarin Android 加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集 'Xamarin.Android.Support.Compat'
Xamarin Android Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'Xamarin.Android.Support.Compat'
我正在为我的公司开发 Xamarin.Forms 项目,我们计划在 IOS 和 Android 上发布我们的应用程序(在 Macbook pro 上使用 Visual Studio 社区版) .到目前为止,一切似乎都还不错。然后我突然无法在 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 'Xamarin.Android.Support.Compat, Version=1.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Xamarin.Android.Support.Compat.dll'
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference, Mono.Cecil.ReaderParameters parameters) [0x00099] in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:220
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference) [0x00000] in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:170
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) [0x0015c] in <593a6fd557984367bb21e275d0fa0659>:0
at Xamarin.Android.Tasks.ResolveAssemblies.Execute (Java.Interop.Tools.Cecil.DirectoryAssemblyResolver resolver) [0x0019c] in <593a6fd557984367bb21e275d0fa0659>:0
我很确定我没有更改任何源文件,它一直在构建直到现在..
我使用的唯一应用程序兼容性是 "Xamarin.Android.Support.v7.Compat".
我尝试过的东西:
- 正在删除所有包并重新添加它们。
- 正在创建新的 Xamarin.Forms 项目并从 git 中提取代码 - 同样的错误
- 正在安装 Xamarin.Android.Support.Compat - 我遇到错误:
You are trying to install this package into a project that targets
'MonoAndroid,Version=v6.0', but the package does not contain any
assembly references or content files that are compatible with that
framework.
- 确保我的目标框架与目标版本相同(使用 API 23)并且我的最低目标版本是 API 19。
- 正在删除 Bin 和 Obj 目录,重新启动解决方案并重新构建。
我正在使用 Xamarin.Forms 2.4.0.38779。我尝试删除所有包并更新为最新的表单 - 仍然出现相同的错误。
这是 packages.config 的 Droid 项目:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="modernhttpclient" version="2.4.2"
targetFramework="monoandroid60" />
<package id="Plugin.PushNotification" version="1.1.2"
targetFramework="monoandroid60" />
<package id="Rg.Plugins.Popup" version="1.0.4"
targetFramework="monoandroid60" />
<package id="Xam.Plugin.DeviceInfo" version="3.0.2"
targetFramework="monoandroid60" />
<package id="Xam.Plugins.Settings" version="3.1.1"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable"
version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable"
version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Forms" version="2.4.0.38779"
targetFramework="monoandroid60" />
</packages>
如果需要,我会提供任何日志。
所以在启用详细的构建输出后我发现了问题!
Xamarin 的错误描述真的很糟糕,通过调查构建日志,我发现 Plugin.PushNotification NuGet 包需要这个丢失的 dll 我同时用于 iOS 和 [=15] =].从 Android 项目中删除对该包的所有引用后,它再次开始构建!
今年大部分时间我一直在我的 Macbook Pro 上处理 Xamarin 项目以了解这些类型的问题。
如果您将 OSX 上的 Xamarin 项目 运行 复制到 Windows 或反之亦然,通常会发生这种情况。
解决办法总是一样的。列出项目中所有使用的包。完全删除软件包并使用指定的版本号重新安装它们。
我正在为我的公司开发 Xamarin.Forms 项目,我们计划在 IOS 和 Android 上发布我们的应用程序(在 Macbook pro 上使用 Visual Studio 社区版) .到目前为止,一切似乎都还不错。然后我突然无法在 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 'Xamarin.Android.Support.Compat, Version=1.0.0.0, Culture=neutral, PublicKeyToken='. Perhaps it doesn't exist in the Mono for Android profile?
File name: 'Xamarin.Android.Support.Compat.dll'
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference, Mono.Cecil.ReaderParameters parameters) [0x00099] in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:220
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference reference) [0x00000] in /Users/builder/data/lanes/5147/c2a33d8e/source/xamarin-android/external/Java.Interop/src/Java.Interop.Tools.Cecil/Java.Interop.Tools.Cecil/DirectoryAssemblyResolver.cs:170
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) [0x0015c] in <593a6fd557984367bb21e275d0fa0659>:0
at Xamarin.Android.Tasks.ResolveAssemblies.Execute (Java.Interop.Tools.Cecil.DirectoryAssemblyResolver resolver) [0x0019c] in <593a6fd557984367bb21e275d0fa0659>:0
我很确定我没有更改任何源文件,它一直在构建直到现在.. 我使用的唯一应用程序兼容性是 "Xamarin.Android.Support.v7.Compat".
我尝试过的东西:
- 正在删除所有包并重新添加它们。
- 正在创建新的 Xamarin.Forms 项目并从 git 中提取代码 - 同样的错误
- 正在安装 Xamarin.Android.Support.Compat - 我遇到错误:
You are trying to install this package into a project that targets 'MonoAndroid,Version=v6.0', but the package does not contain any assembly references or content files that are compatible with that framework.
- 确保我的目标框架与目标版本相同(使用 API 23)并且我的最低目标版本是 API 19。
- 正在删除 Bin 和 Obj 目录,重新启动解决方案并重新构建。
我正在使用 Xamarin.Forms 2.4.0.38779。我尝试删除所有包并更新为最新的表单 - 仍然出现相同的错误。
这是 packages.config 的 Droid 项目:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="modernhttpclient" version="2.4.2"
targetFramework="monoandroid60" />
<package id="Plugin.PushNotification" version="1.1.2"
targetFramework="monoandroid60" />
<package id="Rg.Plugins.Popup" version="1.0.4"
targetFramework="monoandroid60" />
<package id="Xam.Plugin.DeviceInfo" version="3.0.2"
targetFramework="monoandroid60" />
<package id="Xam.Plugins.Settings" version="3.1.1"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Animated.Vector.Drawable"
version="23.3.0" targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Design" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v4" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.AppCompat" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.CardView" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.MediaRouter" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.v7.RecyclerView" version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Android.Support.Vector.Drawable"
version="23.3.0"
targetFramework="monoandroid60" />
<package id="Xamarin.Forms" version="2.4.0.38779"
targetFramework="monoandroid60" />
</packages>
如果需要,我会提供任何日志。
所以在启用详细的构建输出后我发现了问题!
Xamarin 的错误描述真的很糟糕,通过调查构建日志,我发现 Plugin.PushNotification NuGet 包需要这个丢失的 dll 我同时用于 iOS 和 [=15] =].从 Android 项目中删除对该包的所有引用后,它再次开始构建!
今年大部分时间我一直在我的 Macbook Pro 上处理 Xamarin 项目以了解这些类型的问题。
如果您将 OSX 上的 Xamarin 项目 运行 复制到 Windows 或反之亦然,通常会发生这种情况。
解决办法总是一样的。列出项目中所有使用的包。完全删除软件包并使用指定的版本号重新安装它们。