Subversion作業コピー内の最新Revision番号をソースコードに埋め込む

開発時に不具合が発生したときなど、どのRevisionでビルドされたモジュールなのかをソースコードに変数として埋め込んでおきたい場合があります。ビルドするごとに変数を更新しておけばよいのかもしれませんが効率的ではありません。TortoiseSVNとあわせてインストールされるSubWCRevで自動化することができたので、その方法をメモしておきます。

TortoiseSVNをインストールする

まずはSubversionクライアントとしてTortoiseSVNをインストールします。

ja.osdn.net

インストールするとSubWCRevというツールがあわせてインストールされます。

SubWCRevとは

SubWCRevを使用すると次のようなことを実現できます。

  • 作業コピー内に存在する管理ファイルの様々な情報を取得できる
  • テンプレートファイルのキーワード部分を、取得した情報に置換して別ファイルを生成することができる

テンプレートファイルを用意する

VisualStudioのプロジェクトに.txtファイルを追加します。最新Revision番号を文字列として保持するclassのテンプレートであれば次のようになります。クラス名や変数名は任意です。

public class SubWCRev
{
    public readonly string RevisionNumber = "$WCREV$";
}

$WCREV$が置換されるキーワードです。キーワードには他にもいろいろあるのでこちらを参照してください。

VisualStudioのビルドイベントを設定する

SubWCRevで生成したファイルをビルド対象にするので、ビルド前イベントに設定する必要があります。ディレクトリやファイルのパスにはVisualStudioのマクロを使用すると便利です。

プロジェクトの作業コピーディレクトリを対象に、hoge.txtファイルのキーワードを置換してhoge.csファイルを生成する場合には次のように設定します。

SubWCRev $(ProjectDir) $(ProjectDir)hoge.txt $(ProjectDir)hoge.cs

作業コピー内の最新Revision番号が1234の場合、次のようなファイルが生成されます。

public class SubWCRev
{
    public readonly string RevisionNumber = "1234";
}