2011-03-15 63 views
8

我寫了一個批處理文件,它在執行時會生成一個visual studio解決方案。該解決方案由幾個C#項目組成。我正在使用MSBuild實用程序。當任何項目出現編譯錯誤時,如何停止進一步編譯? 進一步如何獲取錯誤消息並在命令提示符下顯示它們?在編譯錯誤時立即停止MSBuild處理

+0

Dupe:http://stackoverflow.com/questions/3297194/stop-msbuild-process-if-a-target-fails – 2011-03-15 13:35:04

+1

@RitchMelton不是一個騙局,因爲它是關於停止解決方案的第一次失敗。 – 2012-01-24 06:03:50

回答

5

建立一個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 answer to a post on MSDN Forums

+0

我用.NET 4.0中的msbuild嘗試過。不工作,沒有.proj文件被創建,我通過procmon監視msbuild acvitity以及檢查磁盤文件。 – zhaorufei 2013-06-13 08:40:30

+0

這仍然在.NET 4.0中受支持;確保在通過系統設置設置環境變量時沒有打開命令提示符窗口,如果是這種情況,則打開新的命令提示符窗口。 – 2013-06-13 08:52:27

4

如果您已經發布了批處理文件的相關部分,那麼給出答案會更容易。然而,對於你的問題的第二部分,這裏是一個例子,我是如何在我們構建腳本的一個解決幾乎相同的問題:

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%