1

私はTFS2010チームビルド、ワークフロー、MSBuildを学習中です。私はワークフローの一般的な理解を持っており、最近、テストビルドを成功させることができました。

ここで、ビルドバージョンとアセンブリバージョンの同期を維持するためのサポートが必要です。私はこのテーマについてジム・ラムジョン・ロビンズによるいくつかのブログを読んでいますが、私が始めたときよりも今はもっと混乱していると感じています。Jim Lambのブログでは、現在の日付を使用してバージョン番号を設定するカスタムアクティビティの使用について説明しています。また、John Robbinsのブログでは、追加の依存関係がないため、最後のアセンブリバージョンの取得とMSBuildでのすべての実行について説明しています。

現在、3.8.0.2などの4桁のバージョン番号を使用しており、ビルドごとに最後の番号をインクリメントしています。このバージョンを使用して、すべてのアセンブリを同期します。この形式を維持したいので、ワークフローですべてのバージョン管理を処理したいのですが、アセンブリから最後のバージョンをそのように読み取る方法がわかりません。これにはカスタムアクティビティを作成する必要があると思いますが、最後のバージョンを読み取るためにどのような方法を使用しますか?

前もって感謝します!ジム

4

1 に答える 1

3

Stuart Prestonは、彼のブログでアセンブリ情報を設定する簡単な方法について説明しています。http: //stuartpreston.net/blog/2010/05/02/simple-assembly-versioning-with-team-build-2010/

編集:

上記のリンクは無効です。キャッシュされたバージョンは次のとおりです。

2010年5月2日にTeamFoundationServerの下でStuartPrestonによって投稿されました

これを実現するためのより洗練された方法はたくさんありますが、私が望んでいたものを正確に提供するものはないようでした。そこで、ここでは、TeamBuild2010を使用してアセンブリバージョン管理を行う別の方法を紹介します。チームビルド番号をアセンブリバージョンの番号と正確に一致させたいと思いました。 (そして派生しない)、このように:

(画像)

これが私のやり方です。まず、ビルド定義内でBuildNumber形式をカスタマイズします。

(画像)

私の場合、メジャーバージョン番号とマイナーバージョン番号「0.1」が明示的に追加されるようにカスタマイズすることにしました。これにより、達成したいバージョン番号の最初の2つの部分を制御できます。また、前にマクロ$(Month)$(DayOfMonth)を追加しまし1た。2010年5月2日の場合、これにより10502という番号が生成されます(ここで通年を使用しない理由は、今日は100502のビルド番号を生成し、ファイルのバージョン番号は65335を超えることはできないためです)。

バージョン0.2、0.3、または1.0で作業することにした場合、ここでビルド番号をインクリメントして定義を保存するだけで、年が変わったときに番号をインクリメントできます。簡単だと言った!

ビルド番号形式の最後の部分はそのままにしました(つまり、その日のビルドごとに1ずつ増加し、翌日にリセットされるリビジョン番号)。

これで、ソリューションに対して実行されたときにこのバージョン番号を取得しMSBuild、バージョン番号を分割して数値部分をProperties\AssemblyVersion.csファイルに取り込むだけです(最初にそのファイルの行をコメントアウトしてAssemblyFileVersionチェックインする必要があります)。

ファイルに挿入する必要のあるフラグメントは次のとおり.csprojです(チェックアウトしてから、メモ帳またはお気に入りのテキストエディターで開く必要があります)。

<UsingTask
    TaskName="Microsoft.TeamFoundation.Build.Tasks.GetBuildProperties"
    AssemblyFile="$(MSBuildProgramFiles32)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\Microsoft.TeamFoundation.Build.ProcessComponents.dll"
  Condition="' $(BuildUri) '!='  '"/>

<Target Name="BeforeBuild" Condition="' $(BuildUri) '!='  '">
  <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
    <Output TaskParameter="BuildNumber" PropertyName="BuildNumber" />
  </GetBuildProperties>

  <PropertyGroup>
    <BuildNumberSplitLocation>$([MSBuild]::Add($(BuildNumber.LastIndexOf('_')),1))</BuildNumberSplitLocation>
  </PropertyGroup>

  <ItemGroup>
    <AssemblyVersionLines Include="[assembly:AssemblyFileVersion(&quot;$(BuildNumber.Substring($(BuildNumberSplitLocation)))&quot;)]" />
  </ItemGroup>

  <Exec Command="attrib -r &quot;$(ProjectDir)\Properties\AssemblyInfo.cs&quot;" ContinueOnError="false" />
  <Message Text="Lines being added: @(AssemblyVersionLines)" Importance="high" />
  <WriteLinesToFile File="$(ProjectDir)\Properties\AssemblyInfo.cs" Lines="@(AssemblyVersionLines)" />
</Target>

(参照の終わり)

彼はファイルを変更して、ビルド前に渡された値でcsprojファイルを更新し、アセンブリが次の順列に従ってバージョン管理されるようにします。AssemblyInfo.csTFSMMDDRev

カスタムビルド番号が必要なという点で、状況は少し異なります。これを行うには、をに変更BuildNumberFormatします3.8.0.$(Rev:.r)。変更するのはリビジョンだけなので、TFS自動的に増分します。

部分を更新したい場合は3.8.0.、ビルド番号フォーマットを手動で再度編集できます。BeforeBuildそれ以外の場合は、のタスクの一部としてビルド番号を保存および解析するためのソリューションが必要になりますcsproj

于 2012-05-16T17:08:59.423 に答える