2013-01-21 128 views
3

我有我的C++ Visual Studio 2010的項目,該項目使用命令xcopy一個生成後事件,但是當這種XCOPY返回錯誤代碼(> 0),所有構建失敗也和消息「建unsuccessfull」 ,如何在構建事件時轉向錯誤感應度?生成事件

謝謝!

+0

有你想要*忽略*的失敗XCOPY結果的原因是什麼? – WhozCraig

+1

也許運行一個批處理文件。 –

+0

後期構建*是一個批處理文件。使用exit/b 0. –

回答

5

可以使用Exec任務的IgnoreExitCode

<Target Name="MyAwesomePostBuildTarget" AfterTargets="Build"> 
    <Exec IgnoreExitCode="true" Command="xcopy etc. etc." /> 
</Target> 
+0

甚至不知道這個存在。這是可配置爲用戶界面屬性(我沒有我的VS在我面前運行;在不同的機器上)。 – WhozCraig

+0

我不知道。我避免使用IDE編輯項目文件,因爲它非常喜歡破壞它們。 –

+0

然後,你可能已經完成了公平份額的確實= P。我剛剛看到VS 2005的提及,到2012年似乎一致?我可能有真正的用途,只是好奇,如果它是合理的可靠。 (哦,和+1。完美適合這個問題) – WhozCraig

1

您可以通過附加|| exit /b 0到命令的末尾覆蓋(幾乎)所有批次CMD的失敗結果。例如:

del somefile.txt || exit /b 0

這樣的批處理文件的工作有點像C.你可以做& &當以前的命令成功有條件地運行一個命令,而||在上一個命令失敗時運行命令。

exit /b 0告訴CMD處理器退出腳本和錯誤級別設置爲零(0)。永遠不要忘記包含/ b開關!如果沒有它,CMD將退出調用腳本以及當前很少(如果有的話)期望的行爲的腳本。

我用從Visual Studio IDE這一招,所以沒有必要做低層次的項目黑客。它適合於一條線,IDE也很方便。

另一個有用的技巧是沉默命令,順便:

xcopy srcfile destfile 1>nul 2>nul || exit /b 0

1是stdout和2是標準錯誤。 shell程序的Windows系列是關於哪個輸出他們可能使用出了名的不一致,所以我一般只是管或兩者都不管。