如何解决mscorlib与NuGet包间的ApplicationException冲突
解决Syncfusion.Xamarin.SfPdfViewer中ApplicationException类型冲突问题
这个错误是因为Syncfusion.Compression.Portable包中定义了和.NET标准库(mscorlib)同名的ApplicationException类型,导致编译器无法确定该使用哪一个。下面是几个经过验证的解决方法:
1. 明确指定类型的命名空间
在代码中用到ApplicationException的地方,直接加上完整的命名空间限定,让编译器明确知道要引用的是系统库中的类型:
// 明确使用mscorlib中的System.ApplicationException throw new System.ApplicationException("你的异常信息");
如果确实需要用到Syncfusion包里的该类型(这种情况比较少见),可以查看Syncfusion的文档确认其命名空间,同样用完整路径引用。
2. 升级Syncfusion NuGet包版本
你当前使用的Syncfusion包版本16.1451.0.37比较老旧,这类命名空间冲突的问题在后续版本中已经被修复。建议:
- 打开Visual Studio的NuGet包管理器,找到所有Syncfusion相关的包(包括
Syncfusion.Xamarin.SfPdfViewer和依赖的Syncfusion.Compression.Portable) - 将它们统一升级到最新的稳定版本
- 确保PCL、Android、iOS、UWP所有项目都同步升级到相同版本,避免版本不一致引发新问题
3. 给冲突程序集设置别名
如果暂时无法升级版本,可以通过别名来区分两个程序集的类型:
- 右键点击项目中的
Syncfusion.Compression.Portable引用,选择「属性」 - 在「别名」输入框中设置一个自定义别名,比如
SyncfusionCompression - 在需要使用该程序集类型的代码文件顶部添加extern alias指令:
extern alias SyncfusionCompression; - 引用Syncfusion包里的类型时使用别名前缀:
// 使用Syncfusion包中的ApplicationException throw new SyncfusionCompression::ApplicationException("Syncfusion相关异常");
系统库的类型依然用System.ApplicationException来引用。
4. 清理缓存后重建解决方案
有时候编译缓存会导致这类冲突问题残留,尝试以下步骤:
- 点击Visual Studio菜单「生成」->「清理解决方案」
- 手动删除所有项目下的
bin和obj文件夹 - 重启Visual Studio后重新编译整个解决方案
额外注意事项
- 确保所有项目的
.NET Standard版本保持一致(你当前用的NETStandard.Library v2.0.3是没问题的) - 检查是否有其他第三方NuGet包间接引用了旧版本的
Syncfusion.Compression.Portable,可以通过NuGet包管理器的「依赖项」标签查看,必要时强制统一版本
内容的提问来源于stack exchange,提问作者C McCoy
相关产品推荐
相关产品推荐

