TeamFoundationServer 2008 自動ビルドで、AssemblyVersion を自動更新する

元ネタのほとんどは http://richardsbraindump.blogspot.com/2007/07/versioning-builds-with-tfs-and-msbuild.html

msbuildcommunitytasks を投入

冒頭、<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundaiton.Build.targets" />
の次の行に
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

メインの部分は以下のようにした。内容的な概要はこんな。

  • AssemblyInfoFiles という ItemGroup は、ソリューションに含まれる AssemblyInfo.cs を入れる。** を使うと便利。
  • GetTFSVersion は、TfsVersion を使ってバージョンを取得するはずだった。が、利用しているmsbuildcommunitytasks が古く、アセンブリの読み込みに失敗。今回はあきらめて日時ベースの番号をつけることに。
  • BeforeCompileConfiguration ターゲットで実際に番号の置き換え。このターゲットはカスタマイズ可能な Team Foundatoin のビルドターゲットである。
  • 以前は AssemblyInfo コマンドを使って生成していたが、バージョン番号ぐらいだったら正規表現での文字列置き換えの方が楽だ。AssemblyInfo.cs に登場する要素はほぼ固定なのでこれでよい。

<ItemGroup>
  <AssemblyInfoFiles Include="$(SolutionRoot)\**\AssemblyInfo.cs" />
</ItemGroup>
<Target Name="GetTFSVersion">
  <Message Importance="high" Text="Updating Version: $(Major).$(Minor).$(Build).$(Revision)" />
  <Time Format="MMdd">
    <Output TaskParameter="FormattedTime" PropertyName="Build" />
  </Time>
  <Time Format="hhmm">
    <Output TaskParameter="FormattedTime" PropertyName="Revision" />
  </Time>
  <Message Importance="high" Text="New Version: $(Major).$(Minor).$(Build).$(Revision)" />
</Target>
<Target Name="BeforeCompileConfiguration" DependsOnTargets="GetTFSVersion">
  <Attrib Files="@(AssemblyInfoFiles)" Normal="true" />
  <FileUpdate Files="@(AssemblyInfoFiles)"
          Regex="AssemblyVersion\(&quot;.*&quot;\)\]"
          ReplacementText="AssemblyVersion(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)]" />
  <FileUpdate Files="@(AssemblyInfoFiles)"
          Regex="AssemblyFileVersion\(&quot;.*&quot;\)\]"
          ReplacementText="AssemblyFileVersion(&quot;$(Major).$(Minor).$(Build).$(Revision)&quot;)]" />
</Target>

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。