如何实现git id或build to c#application

时间:2013-02-08 08:59:46

标签: c# git

我想对使用git的应用程序对话框实现构建id。我知道unix命令从git获取构建id,但我不知道如何在构建期间获取它。

3 个答案:

答案 0 :(得分:6)

可能最简单的方法是使用预构建事件。解决方案是调用git命令,将输出转储到文本文件,将该文件包含为资源并使用C#代码加载资源。

使用以下内容将prebuild.cmd添加到项目目录中:

cd %1
git log -n 1 --format=format:"%%h" HEAD > %2

转到项目属性,选项卡Build Events并输入以下命令作为预构建事件命令行:

"$(ProjectDir)prebuild.cmd" "$(ProjectDir)" "$(ProjectDir)revision.txt"

在项目目录中创建一个空的revision.txt文件(或运行一次构建)。将其添加到项目中并为其设置Embedded Resource构建操作。将此文件添加到.gitignore也是有意义的,因为它是自动生成的。

在C#项目中添加一个新的实用程序类:

public static class GitRevisionProvider
{
    public static string GetHash()
    {
        using(var stream = Assembly.GetExecutingAssembly()
                                    .GetManifestResourceStream(
                                    "DEFAULT_NAMESPACE" + "." + "revision.txt"))
        using(var reader = new StreamReader(stream))
        {
            return reader.ReadLine();
        }
    }
}

不要忘记将DEFAULT_NAMESPACE替换为项目的默认命名空间(它被添加到资源名称之前,并且没有通用的方法来获取它,您将不得不对其进行硬编码)。

此解决方案假定git环境变量中存在%PATH%的路径。

答案 1 :(得分:0)

如果您使用Nant,则必须执行一组任务才能获得git id

之后,您可以执行正则表达式并获取ID并将其设置为属性。

答案 2 :(得分:0)

基于max's answer这里是一个替代解决方案,它不会创建资源,而是直接从prebuild.cmd创建类文件。

使用以下内容将prebuild.cmd添加到项目目录中:

@echo off
cd %1
for /F "delims=" %%i in ('git describe --always --dirty --tags') do set git_revision=%%i
echo public static class Git> %2
echo {>> %2
echo     public static string GetRevision()>> %2
echo     {>> %2
echo         return "%git_revision%";>> %2
echo     }>> %2
echo }>> %2

转到项目属性,选项卡Build Events并输入以下命令作为预构建事件命令行:

"$(ProjectDir)prebuild.cmd" "$(ProjectDir)" "$(ProjectDir)Git.cs"

在项目目录中创建一个空的Git.cs文件(或运行一次构建)并将(现有项目...)添加到项目中。同时将Git.cs添加到.gitignore,因为它是自动生成的。