如何实现gitid或构建到c应用程序

本文关键字:构建 应用程序 gitid 何实现 实现 | 更新日期: 2023-09-27 17:58:23

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

如何实现gitid或构建到c应用程序

可能最简单的方法是使用预构建事件。解决方案是调用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%环境变量中。

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

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

根据max的回答,这里有一个替代解决方案,它不创建资源,而是直接从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文件(或运行一次生成),并将其添加到项目中(Existing Item…)。同时将Git.cs添加到.gitignore,因为它是自动生成的。