web-dev-qa-db-ja.com

MSBuild:コマンドラインからターゲットを指定する

ソリューションファイルで特定のプロジェクトをビルドするMSBuildタスクがあります。次のようになります。

<Target Name="Baz">
  <MSBuild Projects="Foo.sln" Targets="bar:$(BuildCmd)" />
</Target>

コマンドラインから、BuildCmdRebuildまたはCleanのいずれかに設定でき、期待どおりに機能します。

msbuild/target:Baz /property:BuildCmd=MyMsbuildFile.xmlを再構築msbuild/target:Baz /property:BuildCmd=MyMsbuildFile.xmlをクリーンアップ

しかし、ビルドするためにBuildCmdを設定するためにどのWordを使用しますか?私はBuildCompileを試してみて、それを空白または未定義のままにしていますが、常にエラーが発生します。

msbuild/target:Baz/property:BuildCmd = Build MyMsbuildFile.xml Foo.sln:エラーMSB4057:ターゲット "bar:Build"がプロジェクトに存在しません。

msbuild/target:Baz/property:BuildCmd = Compile MyMsbuildFile.xml Foo.sln:エラーMSB4057:ターゲット "bar:Compile"がプロジェクトに存在しません。

msbuild/target:Baz MyMsbuildFile.xml Foo.sln:エラーMSB4057:ターゲット "bar:"がプロジェクトに存在しません。

24
Derek

特定のコマンド(Build、Cleanなど)を使用してターゲットをビルドすることを理解しました。

これが私のやり方です。

指定されていない場合、ビルドコマンドを受け取るプロパティを作成します。デフォルトはビルドです。

<PropertyGroup>
  <BuildCmd Condition=" '$(BuildCmd)' == ''">Build</BuildCmd>
</PropertyGroup>

その後、パラメーターで指定されたターゲットを使用してMSBuildを開始するターゲットを作成します。

<Target Name="Stackoverflow">
  <MsBuild Projects="Foo.sln" Targets="$(BuildCmd)" />
</Target>

次に、次のようにターゲットとBuildCmdパラメータを使用してMSBuildファイルを呼び出します。

msbuild msbuild.xml /t:Stackoverflow /p:BuildCmd=Clean

ターゲットがソリューションまたはプロジェクトファイルに存在することを確認してください。

24
CheGueVerra

差出人: http://msdn.Microsoft.com/en-us/library/ms164311.aspx

/ target:targets

このプロジェクトでこれらのターゲットをビルドします。セミコロンまたはコンマを使用して複数のターゲットを区切るか、各ターゲットを個別に指定します。/tも使用できます。例:/ target:Resources; Compile

6
Tim Stewart

重要なのは、BuildCmdプロパティを条件付きにすることです。

 <Target Name="Baz">
   <PropertyGroup>
     <BuildCmd Condition="'$(BuildCmd)' != ''">:$(BuildCmd)</BuildCmd>
   </PropertyGroup>
   <MSBuild Projects="Foo.sln" Targets="bar$(BuildCmd)" />
 </Target>

このように、CleanまたはRebuildが設定されている場合、コロンが追加されます。何も追加しない場合、BuildCmdは空白になり、デフォルトでBuildターゲットになります。

-プロパティグループはターゲットに存在する必要があります。そうでない場合、コマンドラインで指定するとオーバーライドされます。

2
Matt Slagle

CheGueVerraのテンプレートを使用して、私は次のソリューションを思いつきました。

_<PropertyGroup>
    <ProjBuildCmd Condition="'$(BuildCmd)' != 'Build'">:$(BuildCmd)</ProjBuildCmd>
    <SolnBuildCmd Condition="'$(BuildCmd)' != 'Build'">$(BuildCmd)</SolnBuildCmd>
</PropertyGroup>
_

そして、$(BuildCmd)を直接使用する代わりに、$(ProjBuildCmd)または$(SolnBuildCmd)を次のように使用します。

_<!-- Build the 'bar' project only -->
<Target Name="Baz">
  <MSBuild Projects="Foo.sln" Targets="bar$(ProjBuildCmd)" />
</Target>

<!-- Build the whole solution -->
<Target Name="Baz2">
  <MSBuild Projects="Foo.sln" Targets="$(SolnBuildCmd)" />
</Target>
_
0
Derek