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
プロジェクトディレクトリに空のファイルを作成します(またはビルドを1回実行します)。それをプロジェクトに追加し、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を使用している場合は、一連のタスクを実行してgitidを取得する必要があります
この後、正規表現を実行して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
ファイルを作成し(またはビルドを1回実行し)、プロジェクトに追加します(既存のアイテム...)。また、自動生成されるため、に追加Git.cs
します。.gitignore