簡體   English   中英

Visual Studio 2017生成后事件不會在編譯時生成錯誤

[英]Visual Studio 2017 Post Build Event does not generating an error when compiling

我有3個構建后事件,第一個事件無效,並且在編譯我的應用程序時應創建一個(代碼3退出)錯誤。 我的問題是,為什么在編譯應用程序時VS 2017不會引發錯誤?

如果我刪除了2個xcopy事件,並在Build Events中將無效事件保留為唯一事件,則VS會按預期顯示錯誤,但僅當它是唯一構建事件時才會顯示。

我的構建事件如下所示(其中),其中SignTool.exe的路徑確實無效。 構建事件確實確實失敗了(該exe文件未簽名),但是除非我刪除了2個xcopy命令,否則不會報告任何錯誤,有人可以解釋嗎?

"C:\Program Files (x86)\Microsoft SDKsZZ\Windows\v7.1A\Bin\SignTool.exe" sign /f "C:\Data\Visual Studio\CodeSigningCertificate\Cert2020.pfx" /p deznads $(TargetPath)
xcopy $(TargetPath) E:\Data\RotoApps\WIP\bin\x86\Debug\*.* /y
xcopy $(TargetPath) E:\Data\RotoApps\WIP\bin\x86\Release\*.* /y

顯然,Visual Studio不會將生成后的指令解析為一組單獨的命令,而是將其作為單個批處理文件執行,然后檢查最終的%ERRORLEVEL%來確定其失敗還是成功。

在您的示例中,有3條命令,每條命令都會根據自身的成功或失敗設置%ERRORLEVEL% ,因此,如果命令#1和#2失敗,但是#3成功,則#3結果將覆蓋先前的錯誤,Studio會考慮此錯誤成功的構建后步驟。

您可以使構建事件在發生第一個錯誤時停止,但這是您需要在此處實現的事情。 例如:

"C:\Program Files (x86)\Microsoft SDKsZZ\Windows\v7.1A\Bin\SignTool.exe" sign /f "C:\Data\Visual Studio\CodeSigningCertificate\Cert2020.pfx" /p deznads $(TargetPath)
if %ERRORLEVEL% EQU 0 xcopy $(TargetPath) E:\Data\RotoApps\WIP\bin\x86\Debug\*.* /y
if %ERRORLEVEL% EQU 0 xcopy $(TargetPath) E:\Data\RotoApps\WIP\bin\x86\Release\*.* /y

在這里,如果命令#1或#2設置非零%ERRORLEVEL% ,則批處理將不執行以下命令,並且將錯誤代碼保留在%ERRORLEVEL%變量中,Visual Studio將報告此錯誤代碼為失敗的生成后步驟。

您還可以在那里實現更復雜的邏輯,確定構建后事件是否失敗,並通過使用exit N命令返回0(成功)或錯誤(錯誤)來告知Visual Studio。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM