为什么后构build步骤(xcopy)会偶尔退出TeamCity构build中的代码2?

客户端解决scheme中的一些项目具有生成后事件:将生成输出复制到特定文件夹。 这在当地build设时工作正常。 但是,在TeamCity中,我偶尔会得到

xcopy退出代码2

如果我使用常规copy ,它将退出代码1.我希望这与文件locking有关,虽然被复制的特定文件是不一样的,所以也许只是locking共享的目标目录。 我用/y不提示覆盖文件。

任何想法为什么这在TeamCity失败,但不是在本地? 任何想法如何解决?

即使你用xcopy提供/Y开关,当xcopy不知道你正在复制的东西是一个文件还是一个目录时,你仍然会得到一个错误。 此错误将显示为“退出代码2”。 当您在命令提示符下运行相同的xcopy时,您会看到xcopy正在请求文件或目录的响应。

要使用自动构build来解决此问题,可以使用pipe道在预定义的响应中回显。

说你正在复制的东西是一个文件,在F

 echo F|xcopy /y ... 

说你正在复制的东西是一个directoy,在D

 echo D|xcopy /y ... 

有时上述可以通过使用复制命令而不是xcopy来解决:

 copy /y ... 

但是,如果有不存在的目录导致最终的文件目的地,那么将会出现“用代码1退出”。

记住:谨慎使用/C开关和xcopy。

如果在后期构build事件中使用xcopy,则除了/ C之外,还要使用/ Y开关。

 /C Continues copying even if errors occur. /Y Suppresses prompting to confirm you want to overwrite an existing file. 

我通过在我的path的末尾添加\来修复错误代码2,没有它,xcopy会认为它是一个文件而不是文件夹。

我对这个问题的解决方法是进入目标bin文件夹,并确保在那里存在适当的子文件夹。 一旦该子文件夹被手动创build,构build过程就成功完成。

可能你使用TeamCity与Git。 如果是,请检查您想要复制的文件夹是否存在于git存储库中。 通常git aviod添加空的项目文件夹到存储库,所以xcopy无法find它,并产生一个错误。

您可以添加一些空的txt文件到空文件夹,提交并看到文件夹出现在存储库中。

希望这会有所帮助。