【发布时间】:2011-12-13 12:27:33
【问题描述】:
我想为从命令行调用的 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 的选项:基本上创建一个自定义记录器,其中包含两个 ConsoleLogger 作为成员。一个具有在命令行传递的详细程度,另一个是“最小”。记录器注册所有事件并将它们传递给其中一个记录器,具体取决于当前是否正在构建 csproj 文件。输出看起来和正常一样,只是它不包含来自 csproj 文件的数千行。
【问题讨论】:
-
Scott Hanselman 的这篇文章可能会启发你。 hanselman.com/blog/…
-
+ 有趣的阅读。但是我的项目不包含在解决方案中,因此
/m开关与有效地并行构建项目的效果不同:它们仍然是按顺序构建的(我将更新问题以反映这一点) -
在我们的一个项目中,我们使用 MSBuild Sidekick 来弄清楚如何构建我们的产品层次结构,也许值得一看以协助任务的并行化。 attrice.info/msbuild 冗长与并行性耦合似乎很奇怪。
-
这并不是真正的耦合,这只是我试图通过手动调用 msbuild 来绕过 MSBuild 任务的冗长的副作用