2009-07-11 3 views
14

私は1つのxmlファイルに複数のターゲットを設定しました。私はすべてのターゲットが動作することを期待していますが、フリーリストのターゲットだけが実行されます。ここでMSBuildが複数のターゲットを実行しないのはなぜですか?

はIAMをやろうとしているかの簡易版である:チームシティーCIサーバとログレポートプロセスの終了コードからビルドを実行

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="T1"> 
    <Copy SourceFiles="c:\temp\a.txt" DestinationFolder="C:\temp2\" />  
    </Target> 
    <Target Name="T2"> 
    <Copy SourceFiles="c:\temp\b.txt" DestinationFolder="C:\temp2\" />  
    </Target> 
</Project> 

I'am:0

誰もが持ってそれがT2を実行しない理由は何ですか?あなたは複数のターゲットについてのMSBuildを伝える必要があり

答えて

28

<Target Name="Build" DependsOnTargets="T1; T2"> 
</Target> 
+2

ポインタをありがとう、実際に私はそれを指定して動作するようになった:

+0

注意してください依存するターゲットはセミコロンで区切ります。例えば。 Kildareflare

17

をお試しくださいMSBuildのは、デフォルトのターゲットを定義することができますし、それはあなたのターゲット間の依存関係を定義することができます。デフォルトが定義されていない場合、見つかった最初のものが実行されます。 DefaultTargetを使用すると、複数呼び出すことができます。

<Project DefaultTargets="T1;T2"> 

ターゲットは、明確に定義された1つのステップのすべてを達成する必要があります。たとえば、クリーンターゲットは、プロジェクトをクリーンアップするために必要なすべてのファイルとフォルダを削除します。など、すべてのDLLをコンパイルしますコンパイル

あなたの目標は、通常、独自の依存関係を宣言する必要があります。

<Target Name="CI" DependsOnTargets="T1, T2"> 
</Target> 

そうでなければ、あなたの目標は、あなたが実行したいすべての個々のステップを含める必要があります。

<Target Name="XX"> 
    <CallTarget Targets="T1"/> 
    <CallTarget Targets="T2"/> 
</Target> 
2

MSBuildはこの順序を使用して、実行するターゲットを決定します。値が見つかると、値はそこで停止し、実行を開始します。あなたはDefaultTargetsに含まれるターゲット(s)は、プロジェクト要素

  • に発見された最初のターゲットの属性からMSBuild.exe
  • に/ tスイッチを使用して指定

    • ターゲット(複数可)以前のコメント投稿は、あなたが他のターゲットは、そのターゲットの前に最初に実行するようにしてDependsOnTargetsリストを使用することができます述べたように(多少実際 morecomplicated )スクリプト

    を構築します。

    ソリューションについてAfterTargetsはMSBuild 4.0でのみ利用可能であり、以前のバージョンでは使用できません。

    サイード・イブラヒムHashimi

    のMy Book:としてBuildDependsOn

    <PropertyGroup> 
         <BuildDependsOn>T1;T2</BuildDependsOn> 
    </PropertyGroup> 
    

    そしての値を渡す:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

  • 0

    はまた、あなたが依存するすべてのターゲットを定義するプロパティグループを作成することができます下記に示すようなパラメータ:

    <Target Name="Build" DependsOnTargets="@(BuildDependsOn)"/> 
    

    このアプローチでは、このプロジェクトファイルの外部で依存リストを変更して、他の必要な手順を挿入することができます。詳細はsiteを参照してください。

    関連する問題