我希望在通过命令行调用的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的选项:基本上创建一个自定义记录器,该记录器拥有两个ConsoleLoggers作为成员。一个传递了命令行传递的详细程度,另一个则是“最小”级别。记录器注册所有事件,并根据当前是否正在构建csproj文件将它们传递给其中一个记录器。输出看起来与正常情况完全相同,只是不包括来自csproj文件的数千行内容。
/m
开关没有与并行构建项目具有相同的效果:它们仍然是按顺序构建的(我将更新问题以反映这一点)。 - stijn