これを行うには、次のターゲットを使用します。
<Target Name="UpdateAssemblyInfoVersion" DependsOnTargets="GetRevision">
<CreateItem Include="**\AssemblyInfo.vb">
<Output TaskParameter="Include" ItemName="AssemblyFiles"/>
</CreateItem>
<Time>
<Output TaskParameter="Year" PropertyName="Year" />
</Time>
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\("([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?"\)"
ReplacementText="$1("$2.$(Revision)")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCompany\(".*"\)"
ReplacementText="AssemblyCompany("My Company")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCopyright\(".*"\)"
ReplacementText="AssemblyCopyright("Copyright © 2009-$(Year) My Company")" />
</Target>
これにより、AssemblyInfo ファイル (複数のプロジェクト) のいずれかのリビジョン (4 番目の番号) が置き換えられます。AssemblyVersion の AssemblyFileVersionAttribute タグと AssemblyFileVersion タグを調べ、番号に $(Revision) MSBuild プロパティを使用します (SVN からこれを取得してプロパティを設定する GetRevision という別のターゲットがあるため、これはそのターゲットに依存します)。正規表現の置換は、3 桁または 4 桁のバージョン番号を処理します (何らかの理由で、3 桁のみのバージョン番号がたくさんありました)。
また、会社情報や著作権情報を設定・上書きし、「My Company」に設定します。著作権については、怠け者で、常に現在の年を使用するように作成したため、毎年更新することを覚えておく必要はありません (たとえば、「Copyright (c) 2009-2010 My Company」と表示されます)。
このターゲットには、MSBuild コミュニティ タスク拡張機能が必要です。
ポリシーの問題として、SVN にチェックインされたものはすべて最後の番号として .0 を持ち、CI サーバーのみがビルド中にこの値を変更します。これにより、開発者が作成したビルド (顧客に提供することは決して許可されません) と CI サーバーによって作成された「公式」のビルドの違いをすぐに知ることができます。