私は、コマンドラインから呼び出されるmsbuildプロジェクトと、プロジェクト内からMSBuildタスクによって呼び出されるものについて、異なる冗長性を持たせたいと思います。たとえば、次のようにmy.projインサイドMSBuildタスクの冗長性を変更するにはどうすればよいですか?
:コマンドラインで
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
:MSBuildのタスクは.csprojファイルをビルドするとき
msbuild /v:d my.proj
は今、それは同様に詳細な冗長性とそれをしません。しかし、私は最小限の冗長さでそれを構築したいと思います。
私はそうのような手動の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つのConsoleLoggersをメンバーとして保持するカスタムロガーを作成します。 1つはコマンドラインで冗長を渡し、もう1つは 'minimal'です。ロガーはすべてのイベントを登録し、csprojファイルが現在構築されているかどうかに応じてロガーの1つに渡します。出力は、csprojファイルの何千もの行が含まれていない点を除いて、通常と全く同じです。
間の「a.csproj」プロジェクトこのポストScott Hanselmanがあなたを啓発するかもしれない。 http://www.hanselman.com/blog/FasterBuildsWithMSBuildUsingParallelBuildsAndMulticoreCPUs.aspx –
+興味深い読書。しかし、私のプロジェクトはソリューションに含まれていないので、 '/ m'スイッチは効果的に並行してプロジェクトを構築するのと同じ効果はありません:順番に構築されます(これを反映するように質問を更新します) – stijn
プロジェクト私たちはMSBuild Sidekickを使って製品階層を構築する方法を理解しました。また、タスクの合理化を支援する見込みがあります。 http://www.attrice.info/msbuild/冗長性が並列性と結びついていることが間違っているようです。 –