2

TFS 2008(SP1)を使用したとき、ビルドが実行されていた理由を含む「Reason」MSBuildプロパティにアクセスできました。これはビルドが開始されるとすぐに利用可能になったため、それをフェッチするためにタスク/ターゲットは必要ありませんでした。現在、TFS 2010(およびワークフローではなくMSBuild /アップグレードテンプレート)を使用しており、プロパティにデータが入力されていません。IBuildDetailから情報を取得するカスタムタスクを作成することはできますが、MSBuildスクリプトですぐに使用できるプロパティはありませんか?以前は、ビルドの理由に基づいて条件付きのMSBuildスクリプトのインポートを実行できましたが、タスク/ターゲットを使用して理由を取得する必要がある場合、これは機能しません。

4

1 に答える 1

1

まだMSBuildスクリプトを使用しているので、アップグレードテンプレートを使用していると思います。テンプレートが現在のビルド理由を取得し、[構成フォルダーのTfsBuildの実行]アクティビティを介してMSBuildに渡すように、アップグレードテンプレートのクローン/編集または変更を行うことができます。Visual Studioで編集するテンプレートを開き、次の手順を実行します。

Run On Agentアクティビティを選択し、 [変数]タブに移動します。ビルド理由を格納する新しい変数を作成し、IBuildDetailからの情報を使用してデフォルト値を設定します。変数のリストに次のようなものを追加します。

Name: currentBuildReason
Variable type: String
Scope: Run On Agent
Default: BuildDetail.Reason.ToString()

次に、「構成フォルダーのTfsBuildの実行」アクティビティーの「プロパティー」ダイアログをクリックします。CommandLineArgumentの楕円を選択して、TFSBuildに引数を渡すダイアログを開きます。おそらく、リストされている変数は1つだけです。

MSBuildArguments

これで、次のように、現在のビルド理由をコマンドライン引数に追加できます(既存のMSBuildArgumentsを渡すことができます)。

String.Format("/p:CurrentBuildReason={0} {1}", currentBuildReason, MSBuildArguments)

[OK]をクリックしてダイアログを閉じます。これにより、現在のビルド理由がCurrentBuildReasonという名前の新しい引数として渡され、MSBuildスクリプトで$(CurrentBuildReason)として参照できます。

アップグレードテンプレートを保存してチェックインします。テンプレートをビルド定義に割り当てます。その定義で使用されるMSBuildスクリプトは、上記のように変数を使用できるようになりました。

于 2013-02-06T16:44:19.577 に答える