You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET中如何排除Version以避免影响程序集SHA计算?

解决.NET构建中版本号不影响程序集SHA的问题

为啥会这样?

你用/p:Version传递动态版本号时,.NET默认会把这个值同时应用到AssemblyVersion、FileVersion和InformationalVersion三个字段中。其中AssemblyVersion是程序集的核心标识字段,会被纳入SHA计算范围,所以哪怕代码没有任何变更,只要版本号变了,程序集的SHA值就会跟着改变。

怎么解决?

核心思路是拆分版本参数:固定住影响SHA计算的AssemblyVersion,只让动态版本号填充不影响SHA的字段。

1. 直接在构建命令中拆分参数

修改Github Actions里的构建命令,分别指定三个版本字段:

dotnet build --configuration Release --no-restore --verbosity normal /p:AssemblyVersion=1.0.0.0 /p:FileVersion=${VERSION} /p:InformationalVersion=${VERSION}
  • AssemblyVersion:固定为一个不变的值(比如1.0.0.0),这个字段决定程序集的哈希值,固定后只要代码不变,SHA就不会改变。
  • FileVersion:设为动态的${VERSION},对应文件属性里的版本号,不影响哈希计算。
  • InformationalVersion:设为动态的${VERSION},可以包含版本标签、分支信息等额外内容,同样不影响哈希计算。

2. 全局配置(简化命令)

如果不想每次构建都写冗长的参数,可以在解决方案根目录创建一个Directory.Build.props文件,提前固定AssemblyVersion:

<Project>
  <PropertyGroup>
    <AssemblyVersion>1.0.0.0</AssemblyVersion>
  </PropertyGroup>
</Project>

之后构建命令就可以简化为:

dotnet build --configuration Release --no-restore --verbosity normal /p:FileVersion=${VERSION} /p:InformationalVersion=${VERSION}

关键提醒

  • 只有AssemblyVersion会影响程序集的SHA计算,必须固定它才能实现你的需求。
  • FileVersion和InformationalVersion仅作为附加元数据存在,修改它们不会改变程序集的哈希值,完全可以使用动态版本号。

内容的提问来源于stack exchange,提问作者user246392

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:12:39