You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

.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文件,里面写死了AssemblyVersionAssemblyFileVersion这类属性,它们会直接覆盖命令行传入的版本号;
  • .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

火山引擎 最新活动