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

.NET Framework项目添加Git提交哈希至可执行文件详情失败求助

解决非SDK风格.NET Framework项目添加Git提交哈希到可执行文件详情的问题

传统非SDK风格的.NET Framework项目和SDK风格项目(包括目标.NET Framework的SDK项目)的构建流程存在差异,你之前使用的InitializeSourceControlInformation是SDK项目特有的构建目标,因此在非SDK项目中不会触发,导致Git哈希注入失效。以下是针对这类项目的可行解决方案:

方法一:通过临时AssemblyInfo文件注入哈希

传统.NET Framework项目依赖AssemblyInfo.cs管理程序集元数据,我们可以通过MSBuild任务在编译前生成包含Git哈希的临时AssemblyInfo片段,自动集成到编译流程中:

将以下代码添加到你的.NET Framework项目文件(.csproj)中:

<Target Name="InjectGitHashIntoAssemblyInfo" BeforeTargets="Compile">
    <!-- 执行Git命令获取提交哈希 -->
    <Exec Command="git describe --long --always --dirty --exclude=* --abbrev=8" ConsoleToMSBuild="True" IgnoreExitCode="False">
        <Output PropertyName="GitCommitHash" TaskParameter="ConsoleOutput" />
    </Exec>
    <!-- 移除哈希字符串中的换行符,避免格式异常 -->
    <PropertyGroup>
        <GitCommitHash>$(GitCommitHash.Trim())</GitCommitHash>
    </PropertyGroup>
    <!-- 生成临时AssemblyInfo文件,注入带哈希的版本信息 -->
    <WriteLinesToFile File="$(IntermediateOutputPath)GitAssemblyInfo.cs" Overwrite="True" Lines='
using System.Reflection;
[assembly: AssemblyInformationalVersion("$(AssemblyInformationalVersion) $(GitCommitHash)")]
' />
    <!-- 将临时文件加入编译列表 -->
    <ItemGroup>
        <Compile Include="$(IntermediateOutputPath)GitAssemblyInfo.cs" />
    </ItemGroup>
</Target>

说明:

  • 该目标会在编译前自动执行,将Git哈希追加到AssemblyInformationalVersion属性中,这个属性对应可执行文件详情里的「产品版本」字段。
  • 如果你的项目原本没有定义AssemblyInformationalVersion,可以直接将Lines里的内容改为[assembly: AssemblyInformationalVersion("$(GitCommitHash)")],直接用哈希作为产品版本。

方法二:通过编译常量注入哈希(修改现有AssemblyInfo)

如果你希望直接复用项目中已有的AssemblyInfo.cs,可以通过定义编译常量的方式注入哈希:

  1. 在项目的AssemblyInfo.cs中添加以下代码:
#if GIT_HASH
[assembly: AssemblyInformationalVersion("1.0.0.0 $(GIT_HASH)")]
#endif
  1. 将以下代码添加到项目文件(.csproj)中:
<Target Name="SetGitHashConstant" BeforeTargets="Compile">
    <Exec Command="git describe --long --always --dirty --exclude=* --abbrev=8" ConsoleToMSBuild="True" IgnoreExitCode="False">
        <Output PropertyName="GitCommitHash" TaskParameter="ConsoleOutput" />
    </Exec>
    <PropertyGroup>
        <GitCommitHash>$(GitCommitHash.Trim())</GitCommitHash>
        <DefineConstants>$(DefineConstants);GIT_HASH=$(GitCommitHash)</DefineConstants>
    </PropertyGroup>
</Target>

说明:编译时会自动将Git哈希替换到$(GIT_HASH)常量中,最终生成带哈希的版本信息。

注意事项

  • 之前使用的AssemblyInfoGenerationSdk工具仅适用于SDK风格项目,和传统非SDK项目不兼容,因此会导致构建异常,直接使用上述MSBuild任务即可解决问题。
  • 操作完成后,清理项目并重新构建,右键生成的可执行文件→属性→详细信息,即可看到包含Git哈希的版本字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:24