.NET 6自定义NuGet包依赖缺失:CI/CD报错如何解决?
解决NuGet依赖在CI/CD流水线中缺失的问题
先确认云端包版本是否和本地一致
- 检查CI/CD脚本里拉取的
MyNugetPackage版本,和你本地用的是不是完全一样。很多时候流水线会默认拉旧版本,或者包源指向的是没更新的仓库。 - 可以在CI步骤里加个命令验证,比如.NET项目执行
dotnet list package MyNugetPackage,直接打印当前使用的包版本,确认是不是你本地开发的那个版本。
检查自研包的依赖打包是否正确
- 本地能跑通是因为开发环境可能通过其他项目间接装了这个Redis包,或者本地NuGet缓存里有,但CI环境是干净的,所有依赖必须靠自研包的依赖声明传递过来。
- 打开
MyNugetPackage的项目文件(.csproj)或者.nuspec文件,看看Microsoft.Extensions.Caching.StackExchangeRedis是不是被正确添加为依赖,有没有设置PrivateAssets这类会阻止依赖传递的属性。
临时救急:直接在项目里加缺失的依赖
- 这方案完全可行,能快速解决CI的报错。在你的项目里添加
Microsoft.Extensions.Caching.StackExchangeRedis的包引用,版本要和自研包依赖的版本保持一致,这样CI环境就能找到这个程序集了。 - 但这只是临时办法,本质问题是自研包的依赖传递有漏洞,长期来看得修复自研包的配置,不然其他项目用这个包时也会踩同样的坑。
根治问题:修复自研NuGet包的依赖配置
- 如果自研包确实需要这个Redis缓存包,就在它的
.csproj里正确添加依赖,比如:<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="x.x.x" /> - 重新打包并发布到团队的NuGet仓库,确保CI流水线能拉到更新后的包,这样所有依赖这个包的项目都能自动获取到Redis缓存包,不用手动添加。
额外检查:CI环境的NuGet源是否正确
- 确认CI用的NuGet源和你本地的一致,别拉到旧的未更新的包。有些团队有多个包源(比如本地测试源、正式云端源),CI配置里可能错指向了旧源。
内容的提问来源于stack exchange,提问作者CodeCraftsman
相关产品推荐
相关产品推荐

