sti*_*ijn 11 msbuild verbosity
我想对从命令行调用的msbuild项目以及项目中的MSBuild任务调用的项目有不同的详细程度.例如:
在my.proj里面:
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
在命令行上:
msbuild /v:d my.proj
Run Code Online (Sandbox Code Playgroud)
现在,当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>
Run Code Online (Sandbox Code Playgroud)
或在实践中
<Target Name=Foo>
<Exec Command="msbuild /v:m %(Projectlist.Identity)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
当然这很好用,但后来我再也无法获得BuildInParallel交换机的功能了(我不认为有可能从命令行调用msbuild而没有它们包含在解决方案中的多个项目?)
更新
我选择了Ludwo:基本上创建了一个自定义记录器,它将两个ConsoleLogger作为成员保存.一个是在命令行传递的冗长,另一个是'minimal'.记录器注册所有事件并将其传递给其中一个记录器,具体取决于当前是否正在构建csproj文件.输出看起来与正常情况完全相同,只是它不包含csproj文件中的数千行.
你有两个选择(至少):)
创建一个额外的 msbuild 脚本来构建 abc 项目“BuildABC.proj”
<Target Name="BuildABC">
<MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
在您的父脚本中,使用 Exec 任务执行 MSBuild 并以最少的冗长调用“BuildABC.proj”
<Target Name=Foo>
<Exec Command="msbuild /v:m /m:2 BuildABC.proj"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
您必须将 BuildABC 项目中所需的所有父属性显式传递给 msbuild /p 参数。
使用自定义记录器。看看这个怎么做。在这种情况下,您可以使用原始脚本:
<Target Name=Foo>
<MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
在您的自定义记录器中,不要在 ProjectStarted 和 ProjectFinished 事件之间记录与例如“a.csproj”项目相关的任何内容,其中 e.ProjectFile ==“a.csproj”(在构建父项目时禁用“a.csproj”项目的诊断日志记录诊断冗长)
| 归档时间: |
|
| 查看次数: |
11835 次 |
| 最近记录: |