首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在.Net dll中嵌入git提交哈希

在.Net dll中嵌入git提交哈希
EN

Stack Overflow用户
提问于 2013-03-01 01:00:53
回答 17查看 50.6K关注 0票数 117

我正在构建一个C#应用程序,使用Git作为版本控制。

当我构建我的应用程序时,有没有办法自动将最后一个提交散列嵌入到可执行文件中?

例如,将提交散列打印到控制台将如下所示:

class PrintCommitHash
{
    private String lastCommitHash = ?? // What do I put here?
    static void Main(string[] args)
    {
        // Display the version number:
        System.Console.WriteLine(lastCommitHash );
    }
}

请注意,这必须在build时完成,而不是在运行时,因为我部署的可执行文件将无法访问git存储库。

关于C++的一个相关问题可以在here上找到。

编辑

根据@mattanja的请求,我发布了我在项目中使用的git钩子脚本。设置:

钩子是linux shell脚本,放在: path_to_project.git\hooks

  • If下。如果您正在使用msysgit,则
  • 文件夹中已经包含了一些示例脚本。为了让git调用它们,从脚本名称中删除'.sample‘扩展名。
  • 钩子脚本的名称与调用它们的事件相匹配。在我的示例中,我修改了提交后,post-merge.
  • My AssemblyInfo.cs文件直接位于项目路径下(与.git文件夹处于同一级别)。它包含23行代码,我使用git生成第24行代码。

由于我的linux外壳有点生疏,该脚本简单地将AssemblyInfo.cs的前23行读取到一个临时文件,将git散列回显到最后一行,然后将该文件重命名为AssemblyInfo.cs。我相信有更好的方法可以做到这一点:

#!/bin/sh
cmt=$(git rev-list --max-count=1 HEAD)
head -23 AssemblyInfo.cs > AssemblyInfo.cs.tmp
echo [assembly: AssemblyFileVersion\(\"$cmt\"\)] >> AssemblyInfo.cs.tmp
mv AssemblyInfo.cs.tmp AssemblyInfo.cs

希望这能有所帮助。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15141338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档