Visual studio 生成时命令副本已退出,代码为4-Visual Studio重新启动将解决此问题

Visual studio 生成时命令副本已退出,代码为4-Visual Studio重新启动将解决此问题,visual-studio,Visual Studio,每当我在这里构建解决方案(其中包含7个项目)时,就会在VisualStudio2010高级版中出现可怕的“命令副本退出,代码为4”错误 这是因为生成后事件无法通过 以下是暂时解决问题的方法 有时:重新启动VisualStudio,我就能够构建解决方案 有时:重启VisualStudio和我选择的文件管理器(Q-DIR4.37)都可以解决这个问题 以下是生成后事件的外观: xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(Targ

每当我在这里构建解决方案(其中包含7个项目)时,就会在VisualStudio2010高级版中出现可怕的“命令副本退出,代码为4”错误

这是因为生成后事件无法通过

以下是暂时解决问题的方法

  • 有时:重新启动VisualStudio,我就能够构建解决方案
  • 有时:重启VisualStudio和我选择的文件管理器(Q-DIR4.37)都可以解决这个问题
以下是生成后事件的外观:

xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y
当您在代码[insert value]错误的情况下退出命令副本时,通常是因为以下原因:

  • 读/写权限
  • 丢失的文件
  • 错误的目录
然而,显然,在我构建解决方案时,没有问题

仅供参考,我在两周前卸载了ReSharper 5.1.1,自那以后Visual Studio一直给我一些错误(其中包括无法调试)。我重新安装了VisualStudio,从那以后它工作得更好,但仍然存在这个问题。这可能是因为某个地方有一些再竖琴的东西吗


你有没有遇到同样的问题并解决了?或者您有什么可能的解决方案吗?

我总是发现这是一个文件锁定问题。代码4无法访问文件。我发现的一个部分解决方案是为xcopy使用/C选项(错误时继续)。这并不是一个真正的解决方案,但主要是它阻止了我的构建失败

另一种仅适用于32位的解决方案是在复制之前使用该工具释放文件上的windows句柄


编辑:我刚刚意识到它也可以在64位下工作。

虽然
/C
可能会忽略错误,但它可能不是真正的解决方案,因为可能需要复制文件才能成功构建

最常见的问题是预定义命令标记周围缺少引号(例如
$TargetDir
)。当您在代码或TFS中创建各种分支和路径时,发生这种情况的可能性非常高

有时,如果文件是只读的,也会导致问题。添加
/R
选项以允许复制只读文件。您可以在以下位置找到可用选项列表:


另一个可能的问题是无法访问基础文件夹。如果是,请尝试执行
“启动xcopy”
而不是
“xcopy”
。这将打开另一个具有管理员权限的命令窗口。

我收到此错误,因为运行TFS生成服务的用户帐户没有写入目标文件夹的权限<代码>右键单击文件夹-->属性-->安全性

由于文件在另一个实例中打开,因此出现此错误

当我关闭文件并再次重新构建解决方案时,它被成功复制。

我也遇到了同样的问题。
VS中的一个简单的“清理解决方案”清除了错误,但它是一个临时解决方案。

如果后期生成事件包含用于将生成输出复制到某个目录的copy/xcopy命令(这通常是最常见的后期生成操作)如果源目标或目标目标的完整目录路径包含包含空格的文件夹名称,则可能会出现此问题。请删除目录名的空格,然后重试。

我遇到了相同的错误,但这不是因为文件已锁定,而是因为文件丢失

VS试图复制一个不存在的文件的原因是由于生成后事件命令

在我澄清之后,问题解决了

更新:

正如@rhughes评论的那样:

真正的问题是如何让命令在这里工作,而不是 移除它

他是绝对正确的


正如许多网站所提到的,这有多种原因。对我来说,这是由于源和目标的长度(路径长度)。我在命令提示符下尝试了xcopy,但无法键入完整的源代码和路径(在某些字符之后,它不允许您键入)。然后,我缩短了路径长度,并能够运行。
希望这有帮助。

这种情况可能发生在多种情况下:

  • 当完整字符串路径长于254个字符时
  • 当要复制的文件名错误时
  • 当目标路径错误时
  • 在复制的文件或目标文件夹上设置只读属性时

  • 我发现将文件的Copy To Output Directory参数设置为Copy似乎总能解决锁定问题。虽然现在我有两份文件,需要删除一份

    我也有同样的问题。然而,对我来说什么都不管用。我通过添加

    exit 0
    
    我的代码。问题是,当我复制文件时,有时找不到最后一个文件,bat返回一个非零值


    希望这对别人有帮助

    如果您运行的是Windows 7以后的版本,您可以尝试使用新的“robocopy”命令:

    robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)"
    

    有关robocopy的更多信息可以找到。

    我也遇到了这个问题。请在错误窗口中仔细检查结果

    在我的例子中,一个拖尾
    \
    正在使xcopy崩溃(因为我使用的是
    $(TargetDir)
    )。在我的例子中,
    $(SolutionDir)…\bin
    。如果您正在使用任何其他输出,则需要对此进行调整

    另外请注意,如果编译后错误消失,则
    启动xcopy
    不会修复它。它可能刚刚被命令行抑制,并且没有实际复制任何文件


    顺便说一句,您可以在命令shell中手动执行xcopy命令。在那里执行它们时,您将获得更多详细信息,为您指明正确的方向。

    在管理员模式下运行VS,它应该可以正常工作。

    在构建完成后使用XCOPY时,我遇到了同样的问题。在我的例子中,问题的发生是因为只读权限
    (robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)") ^& IF %ERRORLEVEL% LEQ 4 exit /B 0
    
    msbuild foo.sln /p:PostBuildEvent=
    
    msbuild -m:1
    msbuild -maxcpucount:1
    msbuild