Visual Studio 2010:无法在调试时复制文件

Sim*_*gré 6 environment visual-studio-2010

我有一段时间有问题(因为我正在使用Visual Studio 2010).当我尝试在我的Web应用程序上启动调试时,我从VS.net环境中随机获取此错误:

错误1无法将文件"obj\Debug\SolutionName.exe"复制到"bin\Debug\SolutionName.exe".该进程无法访问文件'bin\Debug\SolutionName.exe',因为它正由另一个进程使用.

摆脱这个错误的唯一方法是重新启动Visual Studio(以便很快得到错误,例如每天两次).

在互联网上搜索了一下之后,我发现可以从这里添加一个预先构建的MSDN Link

我发现的只是在预构建事件中写下一些内容并进行一些文件处理......好吧(无论如何都不行).

问题1:有没有更简单的方法来解决这个问题(并且总是如此!)
问题2:这个问题的确切原因是什么?

Teo*_*gul 3

这与卷影复制有关。您可以在 web.config 中像这样禁用它:

hostingEnvironment shadowCopyBinAssemblies="false"
Run Code Online (Sandbox Code Playgroud)

如果上述设置对于预构建事件根本不起作用,您还可以使用解决方法:

if exist "$(TargetPath).locked.bak" del "$(TargetPath).locked.bak"
if exist "$(TargetPath).bak" del "$(TargetPath).bak"
if exist "$(TargetPath).locked" ren "$(TargetPath).locked" "$(TargetPath).locked.bak"
if exist "$(TargetPath)" ren "$(TargetPath)" "$(TargetPath).bak"
Run Code Online (Sandbox Code Playgroud)

您可以在 Windows 中完全禁用 ShadowCopy 服务,这样您就不必为所有解决方案设置这些值,但这会破坏很多功能,因此我不建议这样做。

您始终可以使用自定义批处理脚本来由最后一个项目的构建后事件(根据构建顺序)调用,这将完成所有复制业务(我现在使用的)。

  • 我不知道为什么它会崩溃,但它曾经经常发生在我身上。现在,我使用一个简单的 .bat 脚本,该脚本由解决方案中的最后一个构建项目调用来完成所有复制工作,这使我免去了所有这些麻烦。这可能是它崩溃的原因:http://connect.microsoft.com/VisualStudio/feedback/details/114694/msb3021-unable-to-copy-file-bug-still-not-fixed-in-final-版本 (2认同)