7

オーバーライドされたビルド ターゲットを外部ファイルに保存し、そのターゲット ファイルを TFSBuild.proj に含めます。発生するコア セットの手順があり、ウィザードによって作成された TFSBuild.proj にインポート行を追加するだけで、これらの追加の手順を取得したいと考えています。

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets"/>

$(SolutionRoot)Import ステートメントが検証された時点でソースがリポジトリから取得されていないため、 のファイルをインポートすることはできません。TFS がTFSBuild.proj他のファイルなしで最初のファイルをプルダウンしているようです。

条件付きインポートを追加しても、ソース管理のバージョンが存在する場合はインポートされません。ディスクに既に存在する以前のバージョンがインポートされます。

これらのビルド ターゲットをソースに格納することをあきらめることはできますが、ソース ツリーから移動するのは最初の依存関係であるため、実行するのは気が進まないのです。

次のいずれかの方法はありますか:

  1. Importこれらのステートメントが正しく評価されるように、さらにいくつかのファイルをプルダウンするようチーム ビルドに指示しますか?
  2. ?AfterCompile以外の方法で、これらのチーム ビルド ターゲットをオーバーライドします。Import
  3. 最終的に、ビルドしようとしているソースの下に保持されているチーム ビルドでビルド ターゲットを実行しますか?
4

3 に答える 3

16

チームビルドには「ブートストラップ」フェーズがあり、チームビルド構成フォルダー(TFSBuild.projのあるフォルダー)内のすべてがバージョン管理からダウンロードされます。これは、ビルドエージェントがMSBuild.exeを呼び出して、TFSBuild.projを実行するように指示する前に、ビルドエージェントによって実行されます。

SolutionRootの下からターゲットファイルを移動し、TFSBuild.projファイルと一緒に構成フォルダーに配置すると、相対インポートステートメントを使用してTFSBuild.projファイルにインポートできるようになります。

<Import Project="myTeamBuild.targets"/>

これらのターゲットが追加のカスタムMSBuildタスクアセンブリに依存している場合は、TFSBuild.projファイルと同じフォルダーにそれらを置くこともでき、相対パスを使用して簡単に参照できます。

TFS2008では、ビルド構成フォルダーはデフォルトで$ / TeamProject / TeamBuildTypesの下にありますが、そこにある必要はありません。実際には、ソリューション内のフォルダーに配置できます。また、チームビルド専用のソリューション内のプロジェクトにすることもできます。これには、ビルドの分岐を容易にするなど、いくつかの利点があります。したがって、私は通常、ビルドを次のようなフォルダーに配置します。

$/TeamProject/main/MySolution/TeamBuild

また、デフォルトでは、ビルドのブートストラップフェーズ中に、ビルドエージェントはビルド構成フォルダーにあるファイルのみをダウンロードし、サブフォルダーに再帰しないことにも注意してください。ブートストラップフェーズ中にサブフォルダーにファイルを含める場合は、ビルドエージェントマシン(%ProgramFiles%\ Visual Studio 9.0 \ Common7 \ IDEにある)のtfsbuildserver.exe.configファイルのappSettingsで次のプロパティを設定できます。 \ PrivateAssemblies)

<add key="ConfigurationFolderRecursionType" value="Full" />

複数のビルドエージェントがある場合は、すべてのマシンでこの設定を設定することを忘れないでください。これは、そのビルドエージェントによって実行されるすべてのビルドに影響します。したがって、実際には、ファイルをルートのルートに保持するのが最善です。可能であれば、構成フォルダーを作成します。

幸運を、

マーティン。

于 2008-09-19T08:29:34.077 に答える
1

ローカルの開発マシンではなく、TFS がビルドを実行しているときにのみターゲットを実行する必要がある場合は、ターゲット ファイルをビルド自体のフォルダーに配置し、次のように参照できます。

<Import Project="$(MSBuildProjectDirectory)\my.team.build.targets.proj" />

ただし、すべてのビルドでターゲットを実行する場合は、次のようなものを追加して、個々のプロジェクトがターゲットを参照するように設定できます。

<Import Project="$(SolutionRoot)/libs/my.team.build/my.team.build.targets" Condition="Exists('$(SolutionRoot)/libs/my.team.build/my.team.build.targets')" />

私のプロジェクトでは、実際にこれらの両方を使用しています。1 つ目はナイトリー ビルドをカスタマイズできるため、完全なソリューション コンパイルを実行する前後に追加の手順を実行できます。2 つ目はプロジェクトごとのカスタマイズを可能にします。

于 2008-09-18T22:05:32.643 に答える
0

インポートするオーバーライド ターゲット ファイルを作成し、それを TeamBuildOverrides.targets のように呼び出し、ビルド タイプの TFSBuild.proj が存在するソース管理の同じフォルダーに配置すると、最初にプルされ、TFSBuild にインポートできるようになります。 .proj ファイル。既定では、TFSBuild.proj ファイルは、プロジェクトのルート フォルダーの直下にあるソース管理の TeamBuildTypes フォルダーに追加されます。

TFSBuild.proj ファイルで次のインポート ステートメントを使用します。

<Import Project="$(MSBuildProjectDirectory)\TeamBuildOverrides.targets" />

TFSBuild.proj ファイルに重複したオーバーライドがないことを確認してください。そうしないと、インポートされたオーバーライドが起動されません。

于 2008-09-19T05:32:35.563 に答える