gpt4 book ai didi

c# - 在 .Net dll 中嵌入 git commit hash

转载 作者:IT王子 更新时间:2023-10-29 00:32:16 24 4
gpt4 key购买 nike

我正在构建一个 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 );
}
}

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

可以找到 C++ 的相关问题 here .

编辑

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

  • hooks是linux shell脚本,放在:path_to_project\.git\hooks
  • 如果您使用 msysgit , hooks 文件夹已经包含了一些示例脚本。为了让 git 调用它们,请从脚本名称中删除“.sample”扩展名。
  • Hook 脚本的名称与调用它们的事件相匹配。就我而言,我修改了post-commitpost-merge
  • 我的 AssemblyInfo.cs 文件直接在项目路径下(与 .git 文件夹同级)。它包含 23 行,我使用 git 生成第 24 行。

由于我的 linux-shelling 有点生疏,脚本只是将 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

希望这对您有所帮助。

最佳答案

您可以将 version.txt 文件嵌入到可执行文件中,然后读取 version.txt的可执行文件。要创建 version.txt 文件,请使用 git describe --long

步骤如下:

使用构建事件调用git

  • 右键单击项目并选择属性

  • 在构建事件中,添加预构建事件包含(注意引号):

    "C:\Program Files\Git\bin\git.exe"describe --long > "$(ProjectDir)\version.txt"

    这将在您的项目目录中创建一个 version.txt 文件。

在可执行文件中嵌入version.txt

  • 右键单击项目并选择添加现有项
  • 添加 version.txt 文件(更改文件选择器过滤器以让您看到所有文件)
  • 添加 version.txt 后,在解决方案资源管理器中右键单击它并选择属性
  • 将构建操作更改为嵌入式资源
  • 将复制到输出目录更改为始终复制
  • version.txt 添加到您的 .gitignore 文件

读取嵌入的文本文件版本字符串

下面是一些读取嵌入式文本文件版本字符串的示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;

namespace TryGitDescribe
{
class Program
{
static void Main(string[] args)
{
string gitVersion= String.Empty;
using (Stream stream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream("TryGitDescribe." + "version.txt"))
using (StreamReader reader = new StreamReader(stream))
{
gitVersion= reader.ReadToEnd();
}

Console.WriteLine("Version: {0}", gitVersion);
Console.WriteLine("Hit any key to continue");
Console.ReadKey();
}
}
}

关于c# - 在 .Net dll 中嵌入 git commit hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com