【问题标题】:How to ignore warnings and errors of a postbuild event?如何忽略构建后事件的警告和错误?
【发布时间】:2017-11-09 14:09:51
【问题描述】:

我的 csproj 中有一个 postbuild 事件。我想忽略此命令的输出,但是每当我执行命令 >nul 2>&1 时,这个 csproj 就会损坏,可能是因为“>”。我注意到当我从 postbuild 窗口写“>”而不是直接编辑 csproj 时,如果被编码.. 是否有解决方法(除了从 bat 文件运行它)

【问题讨论】:

    标签: c# .net msbuild csproj


    【解决方案1】:

    这可以使用来自自定义目标的 MSBuild 的 <Exec> 任务来完成,而不是依赖于默认的预构建脚本属性。

    您可以将其添加到您的 csproj 文件中,而不是使用默认的 pre/post 构建脚本:

    <Target Name="PostBuild" AfterTargets="PostBuildEvent">
      <Exec Command="some command" IgnoreExitCode="true" />
    </Target>
    

    请注意,对于“基于 sdk”的项目(ASP.NET Core、.NET Core、.NET Standard),上述格式是在 Visual Studio UI 中指定构建后事件时添加的,除了IgnoreExitCode 属性。

    【讨论】:

    • 这也适用于我的非基于 sdk 的 F# 项目。 VS2019。还没有尝试过基于 sdk 的 F#。谢谢。
    • 如果嵌套错误导致事件失败,请同时使用IgnoreStandardErrorWarningFormat="true"
    【解决方案2】:

    我使用不同的方法:在批处理中重置错误级别变量。当 VS 检查 %errorlevel% 时,可以简单地将其设置为零,在该处应该忽略一条语句,例如

    MD "$(SolutionDir)..\Binaries" 1>NUL 2>NUL
    SET ERRORLEVEL=0
    

    如果文件夹已经存在,MD 设置错误级别 1。我用 0 覆盖该值,Visual Studio 很高兴。注意:所有进一步的错误也会被忽略,因为如果手动分配变量,则不再分配错误级别(这在大多数情况下都很好)。

    也有可能忽略这样的错误

    MD "$(SolutionDir)..\Binaries" 1>NUL 2>NUL
    SET ERRORLEVEL=
    

    (删除错误级别),它不会抑制进一步的错误,但它的副作用是我们想忽略的错误显示在visual studio的错误列表中,而不是错误导致问题的那个稍后在代码中出现。

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 1970-01-01
      • 2011-07-16
      • 2018-12-12
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多