已发布Nuget包如何无需重新编译自动使用最新依赖版本
解决方案
你原有的A.csproj依赖配置本身就支持浮动版本解析,无需重新编译A包即可实现自动拉取最新兼容依赖:
<ItemGroup> <PackageReference Include="B" Version="1.0.*" /> <PackageReference Include="C" Version="1.0.*" /> <PackageReference Include="D" Version="1.0.*" /> </ItemGroup>
核心原理
打包A.1.0.0.nupkg时,上述1.0.*浮动版本规则会自动转换为包清单中的依赖版本范围[1.0.0, 2.0.0),天然允许拉取1.0.x分支下所有更高的修订版本。Nuget默认还原策略优先使用最低匹配版本,才会默认拉取1.0.0版本的B包。
操作方案
下游项目侧调整(无需修改已发布的A包)
这是最常用的方案,所有操作都在引用A包的业务项目侧执行:
- 针对单个项目:
- 若项目启用了包锁定功能(存在
packages.lock.json文件),先删除该锁文件 - 执行带无缓存参数的还原命令,即可自动拉取最新的B.1.0.1版本:
dotnet restore --no-cache - 若使用Nuget CLI,也可以单独更新指定依赖:
nuget update B
- 若项目启用了包锁定功能(存在
- 全局配置所有项目默认拉取最新兼容依赖:
编辑全局或项目级别的Nuget.config文件,添加如下配置后,所有还原操作都会自动拉取同大版本下的最新修订版:<configuration> <config> <add key="dependencyVersion" value="LatestPatch" /> </config> </configuration>
直接修改已发布的A包(无需重新编译代码)
如果需要让所有引用A包的项目无需额外配置就自动拉取最新依赖,可直接修改已有的A.1.0.0.nupkg文件:
- 将A.1.0.0.nupkg的后缀改为
.zip后解压,打开根目录下的A.nuspec清单文件 - 确认B、C、D的依赖版本范围为
[1.0.0, 1.1.0)(仅允许1.0.x版本更新,避免拉取不兼容的2.0+版本) - 将修改后的文件重新打包为
.nupkg,上传覆盖原版本即可,全程不需要重新编译A包的代码。
内容的提问来源于stack exchange,提问作者Vincent
相关产品推荐
相关产品推荐

