将Xamarin Android程序集dll引用添加到.NET 472时出现NU1201错误如何解决
错误 NU1201 项目 PreEmptive.Protection.Checks.Runtime.Tamper.XAndroid 与 net472 (.NETFramework,Version=v4.7.2) / win 不兼容。项目 PreEmptive.Protection.Checks.Runtime.Tamper.XAndroid 支持的目标框架为:monoandroid90 (MonoAndroid,Version=v9.0)
这个错误的核心是目标框架不兼容:PreEmptive.Protection.Checks.Runtime.Tamper.XAndroid是仅面向Xamarin Android 9.0平台构建的专属程序集,和.NET Framework 4.7.2的运行时、API集完全不互通,无法直接在.NET Framework项目中引用。
- 确认引用该程序集的核心需求:是需要为当前.NET Framework项目接入PreEmptive(Dotfuscator)的防篡改能力,还是误添加了Android平台专属的依赖包?
- 确认当前项目类型:如果是WinForms/WPF/控制台等.NET Framework桌面项目,天生不支持任何Xamarin Android专属程序集的直接引用。
- 检查已安装的NuGet包:确认是否错选了针对Android平台的PreEmptive Protection Checks版本。
场景1:需要为.NET Framework项目添加PreEmptive防篡改校验
直接卸载当前的PreEmptive.Protection.Checks.Runtime.Tamper.XAndroid包,替换为官方面向.NET Framework平台发布的对应防篡改校验包即可,.NET Framework 4.7.2有专属适配的PreEmptive Protection运行时包,无需使用Android专属版本。
场景2:需要同时在.NET Framework项目和Xamarin Android项目中复用公共逻辑
将两个项目共用的业务逻辑抽离到**.NET Standard 2.0**类库项目中,.NET Framework 4.7.2和MonoAndroid 9.0都原生支持.NET Standard 2.0,两个项目分别引用该共享类库即可,不要直接跨目标框架引用Xamarin Android专属程序集。
场景3:确实需要调用该Android程序集的独有逻辑
无法直接在.NET Framework进程内调用该程序集,可采用进程间通信方案实现:将Android专属逻辑放在独立的Xamarin Android应用/服务中,通过本地套接字、HTTP接口等方式和.NET Framework项目通信交互。
内容的提问来源于stack exchange,提问作者Prabhat Patel

