3

gitを使用するアプリケーションのダイアログについてビルドIDを実装したい。gitからビルドIDを取得するUNIXコマンドは知っていますが、ビルド中にそれを取得する方法がわかりません。

4

3 に答える 3

6

おそらくそれを行う最も簡単な方法は、ビルド前のイベントを使用することです。解決策は、コマンドを呼び出し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%

于 2013-02-08T09:55:38.950 に答える
0

Nantを使用している場合は、一連のタスクを実行してgitidを取得する必要があります

この後、正規表現を実行してIDを取得し、プロパティに設定できます。

于 2013-02-08T09:53:01.913 に答える
0

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

于 2017-02-13T11:42:22.187 に答える