24

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

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

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

msbuild / target:Baz / property:BuildCmd = Rebuild MyMsbuildFile.xml msbuild / target:Baz / property:BuildCmd = Clean MyMsbuildFile.xml

BuildCmdしかし、構築するために設定するのにどの単語を使用しますか?試したところBuildCompile空白または未定義のままにしましたが、常にエラーが発生します。

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

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

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

4

5 に答える 5

24

Build、Clean などの特定のコマンドでターゲットをビルドしたいということは理解しました。

これは私がそれを行う方法です。

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

<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

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

于 2008-10-24T14:21:24.107 に答える
7

から: http://msdn.microsoft.com/en-us/library/ms164311.aspx

/ターゲット:ターゲット

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

于 2008-10-24T05:07:41.460 に答える
2

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

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

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

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

于 2012-07-27T13:44:44.707 に答える
0

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>
于 2008-10-24T21:04:31.017 に答える
-9

自分で sln ファイルを編集して調べてみてください。MSBuild は非常に簡単な構文で、ターゲットを探すだけです。

于 2008-10-24T00:45:19.943 に答える