当 Visual Studio 告诉我“xcopy 以代码 4 退出”时出了啥问题

Posted

技术标签:

【中文标题】当 Visual Studio 告诉我“xcopy 以代码 4 退出”时出了啥问题【英文标题】:What is going wrong when Visual Studio tells me "xcopy exited with code 4"当 Visual Studio 告诉我“xcopy 以代码 4 退出”时出了什么问题 【发布时间】:2011-08-03 08:24:09 【问题描述】:

我对构建后事件不是很熟悉,所以我对我的程序出了什么问题有点困惑。在 Visual Studio 2010 中编译时,我得到以下信息:

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

程序似乎运行良好,尽管出现了这个错误,但我不想忽略这个问题,希望不会发生任何不好的事情。奇怪的是,这一行一开始只是一个命令(第一个 xcopy),但随着我继续编译项目(修复其他问题,主要是引用),错误消息越来越大。知道会发生什么吗?

编辑:以下是似乎失败的构建后事件--

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

【问题讨论】:

除了下面的答案,还要确保用Administrator privileges打开VS。复制到特定位置需要管理员权限。 Command copy exited with code 4 when building - Visual Studio restart solves it的可能重复 【参考方案1】:

Xcopy 退出代码 4 表示“发生初始化错误。内存或磁盘空间不足,或者您在命令行中输入了无效的驱动器名称或语法。

看起来 Visual Studio 正在向 xcopy 提供无效参数。通过Project > Right Click > Properties > Build Events > Post Build Event检查您的构建后事件命令。

请注意,如果$(ProjectDir) 或类似的宏术语在展开时在结果路径中有空格,则需要将它们用双引号括起来。例如:

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

【讨论】:

正如我所说,我对构建后事件脚本了解不多(而且我没有编写这些);我在哪里可以找到这个? 转到项目属性 > 构建事件 尝试用双引号 ("command args") 将每个命令括起来。 @Mark Cidade - 我似乎在任何地方都没有“构建事件”。列出的常见属性:“启动项目;项目依赖项;调试源文件;代码分析设置”。列出的配置属性:“配置”。 @RavenDreamer:如果$(ProjectDir)(和/或类似的)在扩展路径中有空格,那么它需要用引号括起来。例如:xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1【参考方案2】:

将监视选项卡切换到“输出”并查找 xcopy 命令。有时在这里您会发现更多可以帮助您解决问题的消息(实际的 xcopy 输出)。如果您没有看到输出选项卡,请使用 View-Output 菜单显示它。

【讨论】:

我专注于检查构建选项卡,但在“输出”选项卡中清楚地告诉我错误是什么。我的脚本引用了一个不存在的文件夹,必须创建它,一切顺利【参考方案3】:

除了接受的答案外,当目标文件夹为只读时也可能发生错误(使用TFS时常见)

【讨论】:

如果你切换到下面提到的@FelicePollano 的输出窗口,你可以看到一些东西。【参考方案4】:

如果找不到源文件 xcopy 也会返回错误代码 4

【讨论】:

这是我的情况。我使用了$(TargetDir),它以Release\ 结尾。使用 $(ProjectDir)\bin\Release 没有尾随 \\ 对我有用【参考方案5】:

当 xcopy 命令尝试覆盖只读文件时,我收到了“exited with code 4”错误。我设法通过将 /R 添加到 xcopy 命令来解决这个问题。 /R 表示应覆盖read only 文件

旧命令:

XCOPY /E /Y "$(ProjectDir)source file" "destination"

新命令

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

【讨论】:

谢谢你,因为确实我不得不去目录>属性并取消选中只读。不知道 /R 开关。谢谢!【参考方案6】:

正如其他答案所解释的,exit code 4 可能有很多原因。

我注意到一种情况,生成的路径名超过了允许的最大长度(就像here)。

对于受影响的构建后事件,我已将 xcopy 替换为 robocopy; robocopy 处理路径似乎略有不同,并且能够完成 xcopy 无法处理的复制任务。

【讨论】:

【参考方案7】:

It means:

发生初始化错误。内存或磁盘空间不足,或者您在命令行输入了无效的驱动器名称或语法。

所以基本上它可以是任何东西哈哈...尝试从命令提示符一次运行一个命令,以确定哪个命令的哪一部分给你带来了麻烦。

【讨论】:

【参考方案8】:

我收到了这个和消息

驱动器规格无效

在不指定驱动器名称的情况下复制到网络共享时,例如

xcopy . \\localhost

在哪里

xcopy . \\localhost\share

意料之中

【讨论】:

【参考方案9】:

此错误是由于您的存储库被复制时是否存在空格。 例如。我的项目被复制到以下位置 c://projects/My rest project 然后你可以看到那里的空白,如果你将你的回购路径更改为下面,它应该可以工作 c://projects/myrestproject

【讨论】:

谢谢,这个解决方案有效@tushar【参考方案10】:

如果目标文件夹被其他一些进程使用,也会出现这种情况。关闭所有可能使用目标文件夹的程序并尝试。

您可以使用资源监视器(Windows 工具)来检查使用您的目标文件夹的进程。

这对我有用!

【讨论】:

在我的情况下,这是因为之前的运行仍然挂在后台某处......谢谢【参考方案11】:

我遇到了这个问题,所以我从命令行运行 xcopy 命令,它说:

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

它实际上是 Visual Studio 持有的东西。我刚刚重新启动了 Visual Studio,它工作正常。

【讨论】:

【参考方案12】:

在我的情况下,问题是由于构建顺序不正确造成的。一个项目在构建后事件上有一个 xcopy 命令,用于将文件从 bin 文件夹复制到另一个文件夹。但是由于不正确的依赖关系,在进行 xcopy 时会在 bin 文件夹中创建新文件。

在 VS 中右键单击您有构建后事件的项目。转到 Build Dependencies > Project Dependencies 并确保其正确。验证项目构建顺序(依赖项的下一个选项卡)。

【讨论】:

【参考方案13】:

我遇到了同样的问题。您还可以检查斜线指向的方向。对我来说,它可以使用反斜杠,而不是正斜杠。示例

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

代替:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"

【讨论】:

【参考方案14】:

在我对 VS 2017 进行更新之前,我有一个运行良好的后期构建命令。 事实证明,SDK 工具已更新并位于新路径下,因此找不到我用来签署程序集的工具。

这个变了……

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

到这里...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

非常微妙但重大的更改,因此如果您看到此错误,请在更新后检查您的路径。

【讨论】:

【参考方案15】:

另一件需要注意的是双反斜杠,因为xcopy 不允许在输入路径参数中使用它们(但它确实在输出路径中允许它们...)。

【讨论】:

【参考方案16】:

如果任何其他解决方案处于调试模式,则首先将它们全部停止,然后重新启动 Visual Studio。它对我有用。

【讨论】:

以上是关于当 Visual Studio 告诉我“xcopy 以代码 4 退出”时出了啥问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Visual Studio 告诉我 AddJsonFile() 方法未定义?

参考 c# Visual Studio

为啥 Visual Studio 告诉我需要引用 System.Private.CoreLib?

Visual Studio 升级了我的数据库,现在如何将其转换回来。

我的程序使用多少RAM?内存分析报告Visual Studio

Visual Studio 2015 Cordova 错误:找不到可部署的 apk