ページ

2013-02-19

MSBuildからAssemblyInfoを生成する

結論から言うと、MSBuild Community TasksAssemblyInfoタスクを使えばできる。

おすすめじゃない方法

おすすめじゃないけど簡単な方法として、既存のAssemblyInfo.csを置き変えてしまう方法がある。
Community Tasksの.targetsをImportしたあと、以下の感じのターゲットを作れば、既存のAssemblyInfo.csを置き変えることができる。



しかし、この方法ではプロジェクトが複数あった場合に、プロジェクト別に値を設定することができない。
これを作ったあと、Community Tasks的におすすめな方法があることがわかった(雛形がある)。

おすすめの方法

ざっくり言うと、GlobalAssemblyInfo.csを作り、それを参照する。

1. GlobalAssemblyInfo生成ターゲットを作る

Community Tasksをインポート後、このようなターゲットを作る。


次のプロセスのために1回実行しておく。

2. GlobalAssemblyInfo.csをリンクとして追加する

各プロジェクトで、GlobalAssemblyInfo.csを追加する。Visual Studioからは、「追加>既存の項目...」で追加するが、
追加ボタンの右の▼を押して、リンクとして追加するのを忘れない。


3. 既存のAssemblyInfo.csから重複する値を削除する

GlobalAssemblyInfoに定義した値は、既存のAssemblyInfo.csから削除しておく。

これで、各プロジェクト個別の値をセットすることを可能にしつつも、バージョン等々をMSBuildから管理できるようになった。

GlobalAssemblyInfoの情報を取得する

アセンブリの情報は、リフレクションで取得することが可能だが、GetCustomAttributesが冗長な記述を要求したりして面倒。
しかし、AssemblyInfoタスクで、GenerateClass="true"にしておくと、「ThisAssembly」クラスを作ってくれる。
そのため、以下のようなシンプルな形でコードから情報を取得可能。

  string product = ThisAssembly.AssemblyProduct;

0 件のコメント:

コメントを投稿