Xamarin Android应用无法部署:System.Deployment.dll缺失报错
我来帮你搞定这个编译报错的问题,这种情况在Xamarin.Android项目引用传统.NET Framework类库时很常见——核心原因是System.Deployment.dll是桌面.NET Framework特有的程序集,并不包含在Mono for Android的运行时profile里,所以当你引用的类库依赖它时,编译过程就会找不到这个文件。
先梳理下你的开发环境:
- Visual Studio Professional 2017 Version 15.6.1
- .NET Framework Version 4.7.02556
- Xamarin 4.9.0.749(支持iOS/Android开发的VS扩展)
- Xamarin.Android SDK 8.2.0.15
- Xamarin.iOS/Mac SDK 11.8.0.20
你遇到的具体错误信息:
Severity Code Description Project File Line Suppression State
Error Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'System.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Perhaps it doesn't exist in the Mono for Android profile? File name: 'System.Deployment.dll'
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters)
at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences (DirectoryAssemblyResolver resolver, ICollection 1 assemblies, AssemblyDefinition assembly, Boolean topLevel)...
下面是几个可行的解决步骤,按优先级尝试:
1. 检查并移除不必要的依赖
先去查看你引用的.NET类库,确认它是否真的需要System.Deployment。很多时候,类库可能在桌面环境下用到了部署相关的功能,但在Android平台完全用不上:
- 如果可以修改类库代码:直接移除对System.Deployment的引用,或者用条件编译区分平台(比如
#if !ANDROID包裹相关桌面专属代码)。 - 如果类库无法修改:可以在Xamarin.Android项目的
AssemblyInfo.cs文件中添加以下代码,告诉编译器忽略这个依赖:[assembly: IgnoreDependency("System.Deployment")]
2. 切换类库到.NET Standard
如果你的引用类库是基于旧版.NET Framework开发的,建议将其迁移到**.NET Standard**。.NET Standard是跨平台的API规范,不会引入桌面特有的程序集依赖,能更好地兼容Xamarin项目。
3. 调整项目引用设置
在Xamarin.Android项目中,找到引用的那个.NET类库:
- 右键点击类库 → 选择“属性”
- 将“复制本地”设置为
False,这样编译时不会尝试复制桌面特有的程序集到Android项目中。
4. 更新Xamarin组件(可选)
你的Xamarin版本4.9.0.749相对VS2017来说不算最新,VS2017的最终更新版本是15.9.x,对应的Xamarin版本会更稳定,兼容性更好。如果前面的方法都无效,可以尝试更新VS2017到最新可用版本,同步更新Xamarin组件。
内容的提问来源于stack exchange,提问作者user619

