Visual Studio 2019 C#打包应用时出现Microsoft.CSharp版本冲突如何解决
原始报错信息
发现不同版本的"Microsoft.CSharp"之间存在无法解决的冲突。
"Microsoft.CSharp, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"与"Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"存在冲突。
系统选择了"Microsoft.CSharp, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",因为它是主引用,而"Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"不是。
依赖v2.0.5.0版本的引用来自MonoAndroid框架自带的Microsoft.CSharp.dll,依赖v4.0.0.0版本的引用来自Nuget安装的AutoMapper 10.1.1组件。
警告 CS0618 'JobIntentService' 已过时:'该类在此安卓平台中已被弃用'
警告 ItemGroupXamarinBuildDownloadRestoreAssemblyAar不再受支持。如果构建失败,请回退到旧版Xamarin.Build.Download,或将包迁移至使用新的XamarinBuildDownloadAndroidAarLibraryItemGroup。如果构建正常,可安全忽略此警告。
警告 @(Content) 生成操作不受支持,对应文件为environment.txt
具体解决步骤
1. 解决Microsoft.CSharp版本冲突核心错误
两种方案二选一即可:
- 直接删除项目原有引用中的Microsoft.CSharp,通过Nuget包管理器安装最新稳定版的Microsoft.CSharp包,覆盖MonoAndroid自带的低版本引用,兼容AutoMapper的依赖要求。
- 添加程序集绑定重定向,打开项目根目录的
app.config文件(不存在则手动新建),写入以下配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.CSharp" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
2. 解决JobIntentService过时警告
- JobIntentService在Android 12及以上版本已被官方弃用,长期方案是替换为WorkManager或协程Worker实现后台任务逻辑。
- 临时打包可直接忽略该警告,或在对应服务类上方添加
[Obsolete]特性关闭警告提示。
3. 解决XamarinBuildDownloadRestoreAssemblyAar警告
- 若当前构建可正常完成,直接忽略即可。
- 若构建失败,可将Xamarin.Build.Download Nuget包降级到0.10.0以下版本,或升级依赖该配置的第三方包到支持
XamarinBuildDownloadAndroidAarLibrary的最新版本。
4. 解决Content生成操作不支持警告
- 右键点击项目中的
environment.txt文件,打开属性面板,将「生成操作」选项从Content修改为AndroidAsset即可消除警告。
内容的提问来源于stack exchange,提问作者Subscribe Me

