2

TFS 2008のビルドは、プロジェクト内のすべてのAssemblyInfo.csファイルをチェックアウトし、AssemblyInfoTaskで更新してから、ビルドが成功したかどうかに応じて、チェックアウトまたはチェックインを元に戻すように設定されています。残念ながら、2つのビルドが互いに接近してキューに入れられると、AssemblyInfo.csファイルが以前のチェックインよりも前のバージョンでチェックアウトされているように見えるため、ビルドが部分的に完了します。

これを回避するために、「Get」タスクを使用して、AssemblyInfo.csファイルを更新する前に強制的に最新バージョンにすることができると思いましたが、これは効果がないようです。何か案は?

<Target Name="AfterGet" Condition="'$(IsDesktopBuild)'!='true'">
<Message Text="SolutionRoot = $(SolutionRoot)" />
<Message Text="OutDir = $(OutDir)" />
<!-- Set the AssemblyInfoFiles items dynamically -->
<CreateItem Include="$(SolutionRoot)\Main\Source\InputApplicationSln\**\$(AssemblyInfoSpec)">
  <Output ItemName="AssemblyInfoFiles" TaskParameter="Include" />
</CreateItem>

<Message Text="$(AssemblyInfoFiles)" />

<!-- When builds are queued up successively, it is possible for the next build to be set up before the AssemblyInfoSpec is checked in so we need to force 
    the latest these versions of these files to be got before a checkout -->
<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="$(RecursiveGet)" Force="$(ForceGet)" />

<Exec WorkingDirectory="$(SolutionRoot)\Main\Source\InputApplicationSln"
          Command="$(TF) checkout /recursive $(AssemblyInfoSpec)"/>

4

2 に答える 2

0

変化:

<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="$(RecursiveGet)" Force="$(ForceGet)" />

に:

<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="True" Force="True" />

AssemblyInfo.cs ファイルをツリーの最上位で強制的に上書きしました。これまでのところ機能していますが、エレガントというよりはハックです。

于 2008-10-08T07:14:12.833 に答える
0

ビルドは AssemblyInfo ファイルを書き直してからチェックインしますか? それとも、AssemblyInfo ファイルをローカルで変更するだけですか。個人的には後者のアプローチを好みます - TFSBuild recipies サイトで文書化されているように:

http://tfsbuild.com/AssemblyVersioning%20.ashx

私は実際に座ってチェックしたことはありませんが、AssemblyInfo ファイルをチェックインした場合、次のような問題が発生している可能性があるのではないかと考えていました...

  1. ビルドをリクエスト、現在の変更セット = 42
  2. 変更セット 42 のビルド 1 が実行を開始します
  3. ビルドをリクエスト、現在の変更セット = 42 (まだ)
  4. キューに入れられた変更セット 42 のビルド 2
  5. 新しい assemblyinfo ファイルで 1 つのチェックをビルドします。現在の変更セット = 43
  6. ビルド 1 の完了
  7. 変更セット 42 のビルド 2 が開始され、変更セット 42 が取得されます。これは、AssemblyInfo ファイルがフォールド ファイルであることを意味します。

私が言うように、ビルドの変更セット番号がいつ決定されるかは正確にはわかりません-キューイング時または実行時。ただし、キューイングの時点である方が理にかなっています。

于 2008-10-06T18:14:57.600 に答える