2013-01-21 91 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系列是关于哪个输出他们可能使用出了名的不一致,所以我一般只是管或两者都不管。