99

我的客户解决方案中的一些项目有一个构建后事件:xcopy构建输出到特定文件夹。这在本地构建时效果很好。但是,在 TeamCity 中,我偶尔会得到

xcopy [...] 以代码 2 退出

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

为什么这在 TeamCity 中失败了,但在本地却没有?

4

6 回答 6

159

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

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

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

echo F|xcopy /y ...

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

echo D|xcopy /y ...

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

copy /y ...

但是,如果通向最终文件目的地的目录不存在,则会出现“以代码 1 退出”。

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

于 2013-02-01T00:43:00.873 回答
39

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

于 2013-10-13T13:03:40.057 回答
34

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

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.
于 2012-03-12T16:36:39.807 回答
2

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

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

于 2014-12-30T17:25:06.820 回答
2

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

于 2013-04-26T03:46:03.130 回答
2

copy为我修好了。xcopy with /c /y不工作。我得到一个出口 4 所以我去了xcopy,但结果我需要引号($TargetPath)

我的脚本:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"
于 2018-07-24T14:15:07.270 回答