出现编译错误时立即停止 MSBuild 处理

发布于 2024-10-22 04:44:26 字数 137 浏览 2 评论 0原文

我编写了一个批处理文件,执行时会构建一个 Visual Studio 解决方案。该解决方案由几个 C# 项目组成。我正在为此使用 MSBuild 实用程序。当任何项目中存在编译错误时,如何阻止构建进一步进行? 此外,我如何获取错误消息并将其显示在命令提示符上?

I have written a batch file, which when executed builds a visual studio solution. The solution comprises of few C# projects. I am using MSBuild utility for this. How can i stop the build from proceeding further when there are compilation errors in any of the projects?
Further how can i get the error messages and display them on command prompt?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

为人所爱 2024-10-29 04:44:26

构建 Visual Studio 解决方案时,不支持首次失败时停止。

您可以通过执行以下步骤解决此问题:

  1. 将环境变量 msbuildemitsolution 设置为 1 (set msbuildemitsolution=1);
  2. 调用 MSBuild 以从目标 VS 解决方案生成 *.proj 文件;
  3. 在生成的 *.sln.proj 文件中,将名为 Build 的目标中的 RunEachTargetSeparately="true" 更改为 RunEachTargetSeparately="false"
  4. 调用 MSBuild 以构建更新的 *.sln.proj 文件。

此答案基于 Dan Moseley 对帖子的回答在 MSDN 论坛上

There's no support for stop on first failure when building a visual studio solution.

You can workaround this by taking the following steps:

  1. Set the environment variable msbuildemitsolution to 1 (set msbuildemitsolution=1);
  2. Invoke MSBuild in order to generate a *.proj file from the target VS solution;
  3. In the generated *.sln.proj file change RunEachTargetSeparately="true" in the target named Build to RunEachTargetSeparately="false";
  4. Invoke MSBuild to build the updated *.sln.proj file.

This answer is based on Dan Moseley answer to a post on MSDN Forums.

酒浓于脸红 2024-10-29 04:44:26

如果您发布了批处理文件的相关部分,那么给您答案会更容易。尽管如此,对于问题的第二部分,这里有一个示例,我如何在我们的构建脚本之一中解决几乎相同的问题:

msbuild.exe /m /p:Configuration=Release /v:n theSolutionFile.sln >Build.log
if ERRORLEVEL 1 goto :showerror
find "0 Warn" Build.log >nul:
if ERRORLEVEL 1 goto :showerror

goto :EOF

:showerror
echo Build error occurred
exit %ERRORLEVEL%

It would be easier to give you an answer if you would have posted relevant parts of your batch file. Nevertheless, for your second part of the question, here is an example how I solved almost the same issue in one of our build scripts:

msbuild.exe /m /p:Configuration=Release /v:n theSolutionFile.sln >Build.log
if ERRORLEVEL 1 goto :showerror
find "0 Warn" Build.log >nul:
if ERRORLEVEL 1 goto :showerror

goto :EOF

:showerror
echo Build error occurred
exit %ERRORLEVEL%
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文