如何将Git提交哈希值添加到可执行文件属性的「详情」标签页
将Git提交哈希添加到可执行文件的「详情」属性
你提到的这个需求其实在项目版本溯源里挺常见的——把Git提交的哈希值嵌到可执行文件的「详情」属性里,方便后续快速定位对应代码版本。我先给你梳理几种通用的实现思路,再聊聊你后来提到的GitVersion方案:
通用解决方案(针对Windows PE文件)
Windows下的EXE/DLL这类可执行文件(PE格式),「详情」标签里的信息来自文件的资源节(Resource Section),核心是版本资源(Version Resource)。要把Git哈希加进去,主要有这两个方向:
1. 脚本+资源文件手动注入
- 先准备一个版本资源模板文件(比如
VersionTemplate.rc),里面预留哈希占位符:#include <windows.h> VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "你的公司名称" VALUE "FileDescription", "你的应用描述" VALUE "ProductName", "你的产品名称" VALUE "FileVersion", "1.0.0.{GIT_SHORT_HASH}" VALUE "ProductVersion", "1.0.0.{GIT_SHORT_HASH}" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END - 用PowerShell拉取当前Git短哈希:
$gitHash = git rev-parse --short HEAD - 替换模板里的占位符,生成实际的资源文件:
(Get-Content .\VersionTemplate.rc) -replace "{GIT_SHORT_HASH}", $gitHash | Set-Content .\Version.rc - 用资源编译器(
rc.exe,随Visual Studio/Windows SDK自带)把.rc编译成.res文件:rc /v Version.rc - 最后在编译可执行文件时,把
.res文件链接进去,生成的EXE就会在「详情」里显示带哈希的版本号了。
2. 借助VS预构建事件自动化
如果你用Visual Studio开发,可以直接通过预构建事件把上述流程整合到编译环节:
- 右键项目 → 属性 → 生成事件 → 预生成事件命令行,添加这段脚本:
:: 获取Git短哈希 for /f %%i in ('git rev-parse --short HEAD') do set GIT_HASH=%%i :: 复制模板文件 copy "$(ProjectDir)VersionTemplate.rc" "$(ProjectDir)Version.rc" :: 替换占位符 powershell -Command "(Get-Content $(ProjectDir)Version.rc) -replace '{GIT_SHORT_HASH}', '%GIT_HASH%' | Set-Content $(ProjectDir)Version.rc" - 确保项目里包含生成的
Version.rc文件,每次编译前都会自动注入最新的Git哈希。
GitVersion方案(更省心的自动化版本管理)
你提到后来决定用GitVersion的工作方式,这确实是更高效的选择——GitVersion会自动根据Git提交历史、标签生成语义化版本号,还能把Git哈希无缝整合到版本信息里。
用GitVersion的话,大致流程是:
- 在项目根目录执行
gitversion init,生成配置文件GitVersion.yml。 - 在配置里调整版本格式,比如把哈希加到
InformationalVersion或FileVersion中(比如设置informational-version: '{SemVer}+{ShortSha}')。 - 结合你的构建工具(MSBuild、GitHub Actions、Azure DevOps等),让GitVersion在构建前生成版本变量,自动注入到可执行文件的版本资源里。
GitVersion会帮你搞定所有哈希提取、版本计算的细节,不用手动维护脚本,适合长期迭代的项目。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

