How to change verbosity of the MSBuild task?
我想对从命令行调用的msbuild项目和从项目内部的MSBuild任务调用的详细程度有所不同。例如:
在my.proj内部:
1 2 3 | <Target Name=Foo> <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> </Target> |
在命令行上:
1 | msbuild /v:d my.proj |
现在,当MSBuild任务生成.csproj文件时,它也会以详细的详细程度进行处理。但是,我想以最小的冗长程度构建它。
我知道可以像这样手动调用msbuild:
1 2 3 4 5 | <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> |
或在实践中
1 2 3 | <Target Name=Foo> <Exec Command="msbuild /v:m %(Projectlist.Identity)"/> </Target> |
,这很正常,但是后来我再也无法获得
更新
我接受了Ludwo的选择:基本上创建了一个自定义记录器,其中包含两个ConsoleLogger作为成员。一个是在命令行中传递的详细信息,另一个是\\'minimal \\'。记录器将注册所有事件,并将它们传递给其中一个记录器,具体取决于当前是否正在构建csproj文件。输出看起来与正常情况完全一样,只是它不包含来自csproj文件的数千行。
您至少有两个选择:)
创建另一个用于构建abc项目的msbuild脚本
" BuildABC.proj "
1 2 3 | <Target Name="BuildABC"> <MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/> </Target> |
在您的父脚本中,使用Exec任务执行MSBuild并调用
" BuildABC.proj "的详细程度
1 2 3 | <Target Name=Foo> <Exec Command="msbuild /v:m /m:2 BuildABC.proj"/> </Target> |
您必须将BuildABC项目所需的所有父级属性明确传递给msbuild / p参数。
使用自定义记录器。请参阅此操作方法。在这种情况下,您可以使用原始脚本:
1 2 3 | <Target Name=Foo> <MSBuild Projects="a.csproj;b.csproj;c.csproj"/> </Target> |
在您的自定义记录器中,请勿记录与以下内容相关的任何内容: e.ProjectFile == " a.csproj "之间的ProjectStarted事件与ProjectFinished事件之间的" a.csproj "项目(在使用诊断详细程度构建父项目时禁用对" a.csproj "项目的诊断日志记录)