我想在使用 git 的应用程序的对话框中实现构建 ID。我知道从 git 获取构建 ID 的 unix 命令,但我不知道如何在构建过程中获取它。
3 回答
可能最简单的方法是使用预构建事件。解决方案是调用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 并将其设置为属性。
根据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
文件(或运行一次构建)并将(现有项目...)添加到您的项目中。还要添加Git.cs
到,.gitignore
因为它是自动生成的。