当 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() 方法未定义?
为啥 Visual Studio 告诉我需要引用 System.Private.CoreLib?
Visual Studio 升级了我的数据库,现在如何将其转换回来。