从package.config迁移到PackageReference后出现异常行为如何解决
迁移package.config到PackageReference后异常问题排查方案
第一步 清理旧缓存与残留配置
- 关闭Visual Studio,删除解决方案目录下所有
bin、obj文件夹,同时删除全局NuGet缓存目录(默认路径%userprofile%\.nuget\packages)内对应项目引用的包版本 - 检查所有项目的
.csproj文件,删除残留的packages.config相关<Import>节点、旧的包路径硬编码配置 - 单独核对单元测试项目的csproj,确认MSTest相关依赖(
MSTest.TestFramework、MSTest.TestAdapter等)均已正确转换为PackageReference格式,不存在同时保留程序集直接引用的冲突情况 - 重新执行解决方案级别的清理、生成操作
第二步 排查程序集加载冲突
- 打开NuGet包管理器的解决方案视图,核对所有项目的同一依赖包版本完全一致,避免主项目和测试项目引用同个包的不同版本导致运行时加载失败
- 删除App.config/web.config中所有手动添加的
<bindingRedirect>绑定重定向配置,在项目属性「生成」标签页勾选「自动生成绑定重定向」,PackageReference默认自动生成的重定向规则优先级低于手动配置,旧的手动配置会导致版本加载异常 - 在触发错误的
TestInitialize方法开头添加AppDomain.CurrentDomain.AssemblyResolve事件监听,捕获加载失败的程序集信息,确认是否为版本不匹配导致外部方法调用失败
第三步 修复调试异常
- 检查所有项目的生成配置,确认测试项目和主项目的生成平台(x86/x64/Any CPU)完全一致,平台不匹配会导致调试符号不对应,出现跳行、变量无法访问的问题
- 确认调试配置下所有项目的「优化代码」选项未勾选,代码优化会导致调试符号和实际执行逻辑不匹配
- 清理Visual Studio符号缓存:在「工具-选项-调试-符号」中点击「清空符号缓存」,重启Visual Studio后重新调试
第四步 核对单元测试配置
- 确认测试项目的目标框架版本和主项目目标框架版本兼容,禁止测试项目目标框架版本低于主项目
- 检查PackageReference的
PrivateAssets属性配置,避免将主项目需要传递的依赖设置为仅测试项目私有,导致运行时无法加载对应程序集
内容的提问来源于stack exchange,提问作者Martin Wagner
相关产品推荐
相关产品推荐

