【发布时间】:2017-11-09 14:09:51
【问题描述】:
我的 csproj 中有一个 postbuild 事件。我想忽略此命令的输出,但是每当我执行命令 >nul 2>&1 时,这个 csproj 就会损坏,可能是因为“>”。我注意到当我从 postbuild 窗口写“>”而不是直接编辑 csproj 时,如果被编码.. 是否有解决方法(除了从 bat 文件运行它)
【问题讨论】:
我的 csproj 中有一个 postbuild 事件。我想忽略此命令的输出,但是每当我执行命令 >nul 2>&1 时,这个 csproj 就会损坏,可能是因为“>”。我注意到当我从 postbuild 窗口写“>”而不是直接编辑 csproj 时,如果被编码.. 是否有解决方法(除了从 bat 文件运行它)
【问题讨论】:
这可以使用来自自定义目标的 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 属性。
【讨论】:
IgnoreStandardErrorWarningFormat="true"。
我使用不同的方法:在批处理中重置错误级别变量。当 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的错误列表中,而不是错误导致问题的那个稍后在代码中出现。
【讨论】: