如何实现gitid或构建到c应用程序
本文关键字:构建 应用程序 gitid 何实现 实现 | 更新日期: 2023-09-27 17:58:23
我想实现关于使用git的应用程序对话框的构建id。我知道从git获取构建id的unix命令,但我不知道如何在构建过程中获取它。
可能最简单的方法是使用预构建事件。解决方案是调用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
,因为它是自动生成的。