已添加System.Xml引用仍报错?Xamarin项目PackageManager开发求助
解决Xamarin重写PackageManager.GetXml时的System.Xml引用错误
快速解决办法
方法一:直接使用系统PackageManager(推荐)
你完全不需要手动实例化并重写PackageManager抽象类,这是多余的操作。Android系统已经提供了现成的PackageManager实例,直接在Android项目中调用即可:
修改MyApp.Android\Services\HelperService.cs里的PM方法:
public IList<ApplicationInfo> PM() { // 获取系统自带的PackageManager实例 var systemPm = Android.App.Application.Context.PackageManager; // 获取所有已安装应用信息 return systemPm.GetInstalledApplications(PackageInfoFlags.MatchAll); }
这样既不用处理GetXml的重写问题,代码更简洁,完全能满足你检查第三方应用是否安装的需求。
方法二:修复System.Xml引用冲突(若坚持重写PackageManager)
如果一定要自行实现PackageManager,需要显式添加指定版本的System.Xml引用:
在你的netstandard项目的csproj文件中,添加以下节点:
<ItemGroup> <Reference Include="System.Xml, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"> <HintPath>C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid\v12.0\System.Xml.dll</HintPath> </Reference> </ItemGroup>
添加后执行以下步骤:
- 清理整个解决方案
- 删除所有项目的bin和obj文件夹
- 重新生成解决方案
错误原因
报错要求的是Mono Android专用的System.Xml 2.0.5.0版本,而你当前项目引用的可能是netstandard通用版本,两者存在程序集绑定冲突,因此即使已添加System.Xml引用,仍会触发错误。显式指定版本可解决冲突,但显然方法一更高效。
内容的提问来源于stack exchange,提问作者Celso
相关产品推荐
相关产品推荐

