Jenkins使用devenv.com构建时PackageReference程序集引用缺失问题
解决方案
- 执行MSBuild还原时明确指定解决方案路径,MSBuild会自动扫描解决方案内所有项目(包括测试项目)的包依赖完成还原,修改后的命令如下:
"C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin\MSBuild.exe" "%WORKSPACE%\solution.sln" /t:Restore /p:RestoreConfigFile="C:\NuGet\NuGet.config" /p:Configuration=ci
你之前的命令没有传入解决方案路径,MSBuild仅会还原当前工作目录下的首个项目依赖,自然不会处理测试项目的包。
- 如果执行上述命令后测试项目的包仍未还原,打开Visual Studio的「配置管理器」,找到你使用的
ci配置,确认测试项目对应的「生成」复选框已勾选,保存解决方案后再提交到代码仓库即可。 - 要是你还有未迁移到PackageReference、仍使用packages.config的项目,单独给这类项目执行nuget还原即可:
C:\NuGet\nuget.exe restore "%WORKSPACE%\testproject.test\testproject.test.csproj" -ConfigFile C:\NuGet\NuGet.config
相关问题补充
- 不需要通过devenv.com执行包还原,MSBuild、nuget.exe的还原结果完全可以被devenv构建识别。你本地手动执行命令可以构建成功,大概率是本地环境已经缓存了对应的依赖包,干净的CI环境没有缓存才会触发引用缺失错误。
- PackageReference的核心优势之一就是全局统一缓存包文件,不需要每个解决方案单独维护packages目录,依赖管理效率更高,冲突概率更低。
内容的提问来源于stack exchange,提问作者M. Jud
相关产品推荐
相关产品推荐

