Visual Studio 15.7.2更新致Xamarin Android项目编译失败
先把报错信息贴出来,方便大家快速定位问题:
1>Foobar.Android -> C:\Apps\foobar-telerik-mobile-app\foobar\Android\bin\Release\foobar.Android.dll
1>No way to resolve conflict between "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" and "mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e". Choosing "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" arbitrarily.
1>The "LinkAssemblies" task failed unexpectedly.
1>Mono.Linker.MarkException: Error processing method: 'System.Void Telerik.XamarinForms.DataGrid.RadDataGridResourceDictionary::InitializeComponent()' in assembly: 'Telerik.XamarinForms.DataGrid.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve System.Func`2 Xamarin.Forms.Internals.ResourceLoader::get_ResourceProvider()
开启「Use Shared Runtime」能构建但没法用于发布,确实只是临时的测试方案,下面给几个实际可行的解决思路:
1. 优先更新/适配Telerik组件版本
这个报错直接指向Telerik的DataGrid组件,大概率是更新VS后Xamarin环境升级,导致旧版Telerik组件出现兼容性问题:
- 打开NuGet包管理器,找到
Telerik.XamarinForms.DataGrid,直接更新到最新稳定版——官方一般会及时适配最新的Xamarin.Forms/VS版本。 - 如果更新后仍有问题,试试回退到之前能正常构建的Telerik版本,同时确认该版本和当前VS/Xamarin环境的兼容性(可以参考Telerik官方的兼容性文档)。
2. 调整链接器配置解决LinkAssemblies失败
LinkAssemblies报错是因为Mono链接器在优化时误删了必要的依赖方法,你可以这样调整:
- 先临时测试:在Android项目属性的「Android Options」->「Linker」里,把链接方式改成
None,如果能正常构建,说明是链接器的优化规则导致的问题。后续可以用自定义链接器文件精准保留代码,避免APK体积过大。 - 添加自定义链接器描述文件
Linker.xml,内容如下:
把这个文件添加到Android项目中,设置「生成操作」为<linker> <assembly fullname="Telerik.XamarinForms.DataGrid"> <type fullname="Telerik.XamarinForms.DataGrid.RadDataGridResourceDictionary" preserve="all"/> </assembly> <assembly fullname="Xamarin.Forms.Core"> <type fullname="Xamarin.Forms.Internals.ResourceLoader" preserve="all"/> </assembly> </linker>LinkDescription,这样链接器就会保留这些必要的类型和方法。
3. 修复mscorlib版本冲突
版本冲突通常是编译缓存或者依赖版本不统一导致的:
- 先清理整个解决方案,手动删除所有项目的
bin和obj文件夹,然后重新生成——很多时候旧缓存会引发这类版本冲突问题。 - 检查Android项目的目标框架:右键项目->「属性」->「应用程序」,确认目标框架是最新的Android API级别(比如Android 13/14),同时确保.NET标准库的引用配置正确。
- 还可以在Android项目的
.csproj文件里添加自动绑定重定向配置,让系统自动处理版本冲突:<PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
4. 验证Xamarin.Forms版本兼容性
更新VS时,Xamarin.Forms可能被自动更新,导致和Telerik组件版本不匹配:
- 查看当前Xamarin.Forms的版本,对照Telerik官方给出的兼容性矩阵,确保两者版本适配。
- 如果Xamarin.Forms是最新版但Telerik还未适配,试试回退Xamarin.Forms到之前稳定的版本,再尝试构建Release包。
内容的提问来源于stack exchange,提问作者Gerry

