.NET Core项目执行dotnet publish后DLL版本未更新的问题咨询
.NET Core项目执行dotnet publish后DLL版本未更新的问题咨询
嘿,我看你遇到的这个版本号不生效的问题,简直是.NET Core版本配置里的经典坑了!我来给你掰扯清楚怎么解决:
首先得搞懂为啥你用dotnet publish -c "Release" -p:Version=x.x.x.x这类命令不管用——核心冲突点在你的AssemblyInfo.cs和.csproj里的配置上。
问题根源
在.NET Core项目里,默认会自动生成程序集版本相关的信息,但如果你的项目里存在这两种情况,就会导致命令行传入的版本参数失效:
- 手动维护了
AssemblyInfo.cs文件,里面写死了AssemblyVersion、AssemblyFileVersion这类属性,它们会直接覆盖命令行传入的版本号; .csproj里配置了<GenerateAssemblyInfo>false</GenerateAssemblyInfo>,这会直接关掉自动生成程序集信息的功能,命令行的版本参数自然就没用武之地了。
具体解决步骤
方案一:完全使用自动生成(推荐)
- 删掉项目里手动创建的
AssemblyInfo.cs文件; - 检查
.csproj文件,把<GenerateAssemblyInfo>false</GenerateAssemblyInfo>这一行删掉(如果有的话),默认这个配置是true,不用手动添加; - 然后重新执行发布命令,比如
dotnet publish -c Release -p:Version=1.2.3.4,这时候DLL的文件版本和产品版本就会变成你指定的1.2.3.4了。
方案二:保留部分自定义AssemblyInfo内容
如果你不想删掉AssemblyInfo.cs(比如里面有其他自定义的程序集配置),那只需要把文件里和版本相关的属性删掉就行:
- 打开
AssemblyInfo.cs,删除[assembly: AssemblyVersion("x.x.x.x")]、[assembly: AssemblyFileVersion("x.x.x.x")]、[assembly: AssemblyInformationalVersion("x.x.x.x")]这几行; - 同样确保
.csproj里没有<GenerateAssemblyInfo>false</GenerateAssemblyInfo>的配置; - 再执行发布命令,版本号就会正常更新了。
额外小提示
如果你需要区分不同环境的版本,还可以在命令行里同时指定预发布版本,比如dotnet publish -c Release -p:Version=1.2.3.4-beta1,这样产品版本会显示包含预发布标签的内容。
对了,你之前说删掉AssemblyInfo和GenerateAssemblyInfo节点后版本生效了,这就是因为你关掉了手动覆盖的开关,让项目用了自动生成的逻辑,命令行参数终于能起作用啦!
备注:内容来源于stack exchange,提问作者Mate Nagy




