为什么在TeamCity构建中,后期构建步骤(xcopy)偶尔会退出代码2?

时间:2011-10-20 11:33:34

标签: teamcity xcopy

我客户端解决方案中的一些项目有一个构建后事件:xcopy构建输出到特定文件夹。这在本地构建时工作正常。但是,在TeamCity中,我偶尔会获取

  

xcopy [...]退出代码2

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

为什么在TeamCity中失败但在本地失败?

6 个答案:

答案 0 :(得分:133)

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

要使用自动构建解决此问题,您可以使用管道回显预定义的响应。

要说你正在复制的东西是一个文件,在F中回显:

echo F|xcopy /y ...

要说你要复制的东西是一个目录,在D中回显:

echo D|xcopy /y ...

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

copy /y ...

但是,如果存在导致最终文件目标的不存在的目录,则会出现“退出代码1”。

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

答案 1 :(得分:31)

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

答案 2 :(得分:30)

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

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

答案 3 :(得分:2)

我对此问题的解决方法是进入目标bin文件夹,并确保其中存在正确的子文件夹。手动创建子文件夹后,构建过程就会成功完成。

答案 4 :(得分:1)

可能你使用TeamCity和git。如果是,请检查git存储库中是否存在要复制的文件夹。通常git aviod将空项目文件夹添加到存储库,因此xcopy无法找到它并生成错误。

您可以将一些空文本文件添加到空文件夹,提交并查看文件夹中的文件夹。

答案 5 :(得分:1)

xcopy with /c /y为我修复了它。 xcopy无效。我的出口是4,所以我选择了($TargetPath),但事实证明我需要在if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)" 周围加上引号。

我的脚本:

{{1}}