12

コマンドラインから呼び出されるmsbuildプロジェクトと、プロジェクト内からMSBuildタスクによって呼び出されるmsbuildプロジェクトの冗長性を変えたいと思います。例えば:

my.projの内部:

<Target Name=Foo>
  <MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>

コマンドライン:

msbuild /v:d my.proj

これで、MSBuildタスクが.csprojファイルをビルドするときに、詳細な冗長性も使用してビルドします。ただし、最小限の冗長性で構築したいと思います。

私は次のようにmsbuildを手動で呼び出すことが可能であることを知っています:

<Target Name=Foo>
  <Exec Command="msbuild /v:m a.csproj"/>
  <Exec Command="msbuild /v:m b.csproj"/>
  <Exec Command="msbuild /v:m c.csproj"/>
</Target>

または実際には

<Target Name=Foo>
  <Exec Command="msbuild /v:m %(Projectlist.Identity)"/>
</Target>

これはコース外ではうまく機能しますが、BuildInParallelスイッチの機能を取得できなくなります(ソリューションに含まれていない複数のプロジェクトで、コマンドラインからmsbuildを呼び出すことはできないと思いますか?)

アップデート

私はLudwoのオプションを選択しました。基本的に、2つのConsoleLoggerをメンバーとして保持するカスタムロガーを作成します。1つはコマンドラインで冗長性が渡され、もう1つは「最小」です。ロガーはすべてのイベントを登録し、csprojファイルが現在作成されているかどうかに応じて、それらをロガーの1つに渡します。出力は、csprojファイルからの数千行が含まれていないことを除いて、通常とまったく同じように見えます。

4

1 に答える 1

5

(少なくとも)2つのオプションがあります:)

  1. abcプロジェクト「BuildABC.proj」をビルドするための追加のmsbuildスクリプトを1つ作成します

        <Target Name="BuildABC">
          <MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/>
        </Target>
    

    親スクリプトで、Execタスクを使用してMSBuildを実行し、最小限の冗長性で「BuildABC.proj」を呼び出します

        <Target Name=Foo>
          <Exec Command="msbuild /v:m /m:2 BuildABC.proj"/>
        </Target>
    

    BuildABCプロジェクトで必要なすべての親プロパティをmsbuild/pパラメーターに明示的に渡す必要があります。

  2. カスタムロガーを使用します。これを行う方法を参照してください。この場合、元のスクリプトを使用できます。

    <Target Name=Foo>
      <MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
    </Target>
    

    カスタムロガーでは、ProjectStartedイベントとProjectFinishedイベントの間に「a.csproj」プロジェクトなどに関連するものをログに記録しないでください。ここで、e.ProjectFile == "a.csproj"(診断の冗長性)

于 2011-10-25T11:12:47.780 に答える