我对后期构建事件不是很熟悉,所以我对我的程序出了什么问题感到有些困惑。在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),但随着我继续编译项目(修复其他问题,主要是引用),错误信息扩大得越来越大。知道会发生什么事吗?
编辑:以下是似乎失败的postbuild事件 -
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
答案 0 :(得分:152)
Xcopy退出代码4表示“发生初始化错误。没有足够的内存或磁盘空间,或者您在命令行中输入了无效的驱动器名称或无效语法。”
看起来Visual Studio正在向xcopy提供无效参数。通过Project Properties > Right Click > Build Events > Post Build Event
检查您的构建后事件命令。
请注意,如果$(ProjectDir)
或类似的宏术语在展开时在结果路径中有空格,则它们需要用双引号括起来。例如:
xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
答案 1 :(得分:30)
将监视选项卡切换到“输出”并查找xcopy命令。有时在这里你会发现一些可以帮助你解决问题的消息(实际的xcopy输出)。如果没有看到输出选项卡,请使用“视图 - 输出”菜单显示它。
答案 2 :(得分:29)
除了接受的答案,当目标文件夹是只读时(使用TFS时常见),也会发生错误
答案 3 :(得分:16)
如果找不到源文件 xcopy ,也会返回错误代码 4 。
答案 4 :(得分:10)
当xcopy命令试图覆盖只读文件时,我收到了'退出代码4 '错误。我设法通过在xcopy命令中添加 / R 来解决这个问题。 / R 表示应覆盖read only个文件
旧命令:
XCOPY /E /Y "$(ProjectDir)source file" "destination"
新命令
XCOPY /E /Y /R "$(ProjectDir)source file" "destination"
答案 5 :(得分:8)
正如其他答案所解释的那样,exit code 4可能有很多原因。
我注意到一个案例,其中结果路径名超过了允许的最大长度(就像here)。
我已通过robocopy替换受影响的帖子构建事件的xcopy; robocopy似乎处理稍微不同的路径,并且能够完成xcopy无法处理的复制任务。
答案 6 :(得分:5)
发生初始化错误。内存或磁盘空间不足,或者在命令行中输入了无效的驱动器名称或无效语法。
所以基本上它可能只是一些哈哈...尝试从命令提示符一次运行一个命令,找出哪个部分命令给你带来麻烦。
答案 7 :(得分:3)
我得到了这个消息
无效的驱动器规范
复制到网络共享时未指定驱动器名称,例如
xcopy . \\localhost
,其中
xcopy . \\localhost\share
预计
答案 8 :(得分:1)
在我的情况下,问题是由于错误的构建顺序。一个项目在构建后事件上有一个xcopy命令,用于将文件从bin文件夹复制到另一个文件夹。但是由于不正确的依赖关系,当xcopy正在进行时,新文件正在bin文件夹中创建。
在VS中右键单击您拥有构建后事件的项目。转到Build Dependencies>项目依赖关系并确保其正确。验证项目构建顺序(依赖项的下一个选项卡)。
答案 9 :(得分:1)
此错误是由于是否有空白在其中复制了您的回购。
例如。我的项目复制到以下位置
c://projects/My rest project
那么您可以看到那里的空白,如果将您的回购路径更改为以下内容,则应该可以使用
c://projects/myrestproject
答案 10 :(得分:0)
我遇到了这个问题,所以我从命令行运行了xcopy命令,它说:
File creation error - The requested operation cannot be performed on a file with
a user-mapped section open.
实际上是Visual Studio抓住了某些东西。我刚刚重新启动了Visual Studio,它运行起来了。
答案 11 :(得分:0)
我有同样的问题。您还可以检查斜线指向的方向。对我来说,它使用反斜杠代替正斜杠。例子
xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"
代替:
xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"
答案 12 :(得分:0)
在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"
非常微妙但重大的更改,因此,如果看到此错误,请在更新后检查路径。
答案 13 :(得分:0)
答案 14 :(得分:0)
如果任何其他解决方案都处于调试模式,则首先将其全部停止,然后重新启动Visual Studio。它对我有用。
答案 15 :(得分:0)
如果其他进程使用了目标文件夹,这也会发生。关闭所有可能使用目标文件夹的程序,然后尝试。
您可以使用资源监视器(Windows工具)来检查使用目标文件夹的进程。
这对我有用!