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

Tim*_*les 88 teamcity xcopy

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

xcopy [...]退出代码2

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

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

Met*_*urf 136

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

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

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

echo F|xcopy /y ...
Run Code Online (Sandbox Code Playgroud)

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

echo D|xcopy /y ...
Run Code Online (Sandbox Code Playgroud)

有时,只需使用复制命令而不是xcopy即可解决上述问题:

copy /y ...
Run Code Online (Sandbox Code Playgroud)

但是,如果存在导致最终文件目标的不存在的目录,则将出现"退出代码1".

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


Ben*_*o99 35

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

  • 而已.在Windows 7,Visual Studio 2013上工作得很好.非常感谢! (3认同)

Dav*_*idS 31

如果在后期构建事件中使用xcopy,请使用除/ C之外的/ Y开关.

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.
Run Code Online (Sandbox Code Playgroud)

  • 很简单!`/ Y`禁止提示!为什么这么难找? (3认同)
  • / Y确实禁止覆盖提示,但这不是代码2的唯一原因.RTFM不会告诉您导致它们的原因. (3认同)