ソリューションファイルで特定のプロジェクトをビルドするMSBuildタスクがあります。次のようになります。
<Target Name="Baz">
<MSBuild Projects="Foo.sln" Targets="bar:$(BuildCmd)" />
</Target>
コマンドラインから、BuildCmd
をRebuild
またはClean
のいずれかに設定でき、期待どおりに機能します。
msbuild/target:Baz /property:BuildCmd=MyMsbuildFile.xmlを再構築msbuild/target:Baz /property:BuildCmd=MyMsbuildFile.xmlをクリーンアップ
しかし、ビルドするためにBuildCmd
を設定するためにどのWordを使用しますか?私はBuild
とCompile
を試してみて、それを空白または未定義のままにしていますが、常にエラーが発生します。
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:"がプロジェクトに存在しません。
特定のコマンド(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
ターゲットがソリューションまたはプロジェクトファイルに存在することを確認してください。
差出人: http://msdn.Microsoft.com/en-us/library/ms164311.aspx
/ target:targets
このプロジェクトでこれらのターゲットをビルドします。セミコロンまたはコンマを使用して複数のターゲットを区切るか、各ターゲットを個別に指定します。/tも使用できます。例:/ target:Resources; Compile
重要なのは、BuildCmdプロパティを条件付きにすることです。
<Target Name="Baz">
<PropertyGroup>
<BuildCmd Condition="'$(BuildCmd)' != ''">:$(BuildCmd)</BuildCmd>
</PropertyGroup>
<MSBuild Projects="Foo.sln" Targets="bar$(BuildCmd)" />
</Target>
このように、CleanまたはRebuildが設定されている場合、コロンが追加されます。何も追加しない場合、BuildCmdは空白になり、デフォルトでBuildターゲットになります。
注-プロパティグループはターゲットに存在する必要があります。そうでない場合、コマンドラインで指定するとオーバーライドされます。
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>
_