NuGet包版本未更新:打包后版本与指定值不符求助
我之前也踩过完全一样的坑!明明在.nuspec或者Properties\AssemblyInfo.cs里改好了版本号,结果pack命令生成的.nupkg还是旧版本,给你整理几个最常见的原因和解决办法:
1. 打包命令的版本参数覆盖了配置
如果你用nuget pack或者dotnet pack的时候加了-Version(或者/Version)参数,这个命令行参数的优先级会高于.nuspec和AssemblyInfo里的配置!比如你之前可能不小心执行过nuget pack -Version 1.0.0,后来没修改参数就直接打包,那生成的包肯定还是1.0.0版本。
- 解决:检查你的打包命令,去掉这个参数,或者把参数值改成你期望的
1.0.1。
2. SDK风格项目的.csproj配置优先级更高
如果你的项目是SDK风格(.csproj开头有<Project Sdk="Microsoft.NET.Sdk">),项目文件里的<Version>字段会直接覆盖AssemblyInfo和.nuspec里的版本设置!很多时候我们改了半天.nuspec,结果.csproj里还留着旧的<Version>1.0.0</Version>配置。
- 解决:打开你的
.csproj文件,找到<Version>节点,把值改成1.0.1;如果不需要这个字段,直接删掉也行。
3. AssemblyInfo里改了错误的版本字段
NuGet打包时默认优先读取AssemblyInformationalVersion字段的值,而不是AssemblyVersion。如果你只修改了AssemblyVersion,没改AssemblyInformationalVersion,那打包出来的版本还是旧的。
- 解决:打开
Properties\AssemblyInfo.cs,确保[assembly: AssemblyInformationalVersion("1.0.1")]这个字段的版本号是正确的。
4. 旧编译输出或NuGet缓存搞鬼
有时候项目的bin/obj文件夹里还留着旧版本的编译文件,或者NuGet本地缓存里有旧的包信息,导致打包时读取了旧数据。
- 解决:
- 手动删除项目根目录下的
bin和obj文件夹; - 执行命令清理NuGet缓存:
nuget locals all -clear; - 重新编译项目后再执行打包命令。
- 手动删除项目根目录下的
5. .nuspec里用了变量但源版本不对
如果你的.nuspec里版本号写的是<version>$version$</version>这种变量形式,它会自动读取项目的版本配置(比如.csproj或AssemblyInfo),这时候你得确保这个变量对应的源版本是正确的,而不是硬编码的旧值。
- 解决:如果想直接指定版本,把变量改成硬编码的
<version>1.0.1</version>;如果要保留变量,就确保项目的版本配置是正确的。
我当时就是因为项目文件里偷偷加了个<Version>字段没注意,改了.nuspec半天没用,后来排查.csproj才发现问题😂
内容的提问来源于stack exchange,提问作者lerp90

