gpt4 book ai didi

msbuild - 如何更改 MSBuild 任务的详细程度?

转载 作者:行者123 更新时间:2023-12-01 23:50:52 25 4
gpt4 key购买 nike

我希望从命令行调用的 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 文件中的数千行。

最佳答案

你有两个选择(至少):)

  1. 创建一个额外的 msbuild 脚本来构建 abc 项目“BuildABC.proj”

        <Target Name="BuildABC">
    <MSBuild Projects="a.csproj;b.csproj;c.csproj" BuildInParallel="true"/>
    </Target>

    在您的父脚本中使用 Exec 任务执行 MSBuild 并调用简洁的“BuildABC.proj”

        <Target Name=Foo>
    <Exec Command="msbuild /v:m /m:2 BuildABC.proj"/>
    </Target>

    您必须将 BuildABC 项目中所需的所有父属性显式传递给 msbuild/p 参数。

  2. 使用自定义记录器。 See this how to do it 。在这种情况下,您可以使用原始脚本:

    <Target Name=Foo>
    <MSBuild Projects="a.csproj;b.csproj;c.csproj"/>
    </Target>

    在您的自定义记录器中,不要记录与以下内容相关的任何内容: ProjectStarted 和 ProjectFinished 事件之间的“a.csproj”项目,其中 e.ProjectFile ==“a.csproj”(在使用诊断详细信息构建父项目时禁用“a.csproj”项目上的诊断日志记录)

关于msbuild - 如何更改 MSBuild 任务的详细程度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com