如何无需重新编译修改已发布NuGet RC包版本并重新推送?
问题解答
不行,没法通过「拉取已发布的RC包→修改版本与标签→推送」这三步实现需求,原因如下:
- NuGet包是包含程序集、元数据文件的压缩包,你拉取后就算修改了
.nuspec里的版本号,程序集本身嵌入的版本元数据(比如AssemblyVersion、AssemblyInformationalVersion)还是原来的RC版本,会导致正式版包的外部版本号和内部程序集版本不一致,给使用者带来困惑,甚至引发兼容性问题。 - 绝大多数NuGet注册表(包括你用的GitHub Packages)都不允许修改已发布的包,也不接受内容不一致的同名版本推送,就算你改了版本标签,推送时大概率会失败。
- 这种修改方式不符合NuGet的规范,可能导致包管理工具出现异常。
正确的做法(无需重新编译源码)
你之前已经用--no-build基于编译好的产物打包了RC版,只要保留当时的编译输出目录,直接重新打包正式版即可:
- 确保之前
dotnet publish生成的out目录(或者Release配置的编译产物目录)没有被删除 - 执行打包命令,指定正式版本号:
dotnet pack --configuration Release --no-build --output nupkgs /p:PackageVersion=4.5.0
--no-build参数会复用之前编译好的产物,完全不需要重新编译源码。
3. 推送正式版包:
dotnet nuget push nupkgs/org.package_one.4.5.0.nupkg --api-key xxx --source "github"
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

