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

5

我有一个问题已经一段时间了(我想自从我使用Visual Studio 2010以来)。当我尝试在我的Web应用程序上启动调试时,我会在VS.net环境中随机收到以下错误:

Error 1 Unable to copy file "obj\Debug\SolutionName.exe" to "bin\Debug\SolutionName.exe". The process cannot access the file 'bin\Debug\SolutionName.exe' because it is being used by another process.

唯一摆脱这个错误的方法是重新启动Visual Studio(然后很快又会出现类似两次一天的错误)。

在互联网上搜索了一下,我发现可以添加一个预构建,从这里MSDN链接

我所找到的就是在预构建事件中写下一些内容并进行一些文件处理...嗯(它仍然无法解决问题)。

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

1个回答

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

hostingEnvironment shadowCopyBinAssemblies="false"

如果上述设置完全不起作用,您还可以使用解决方法,在预构建事件中使用以下命令:
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"

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

您始终可以使用自定义批处理脚本来在最后一个项目(按构建顺序)的postbuild事件中调用,该脚本将处理所有复制业务(我现在使用的方法)。


我必须在每个解决方案中都放置这个?这很奇怪!为什么我要这样做?我的意思是,如果有一个影子副本应该做这件事,为什么它不起作用呢? - Simon Dugré
1
我们将执行影子复制来备份您的解决方案,这样当 Visual Studio 崩溃时,您可以恢复到上一次的状态和文件。我相信您在 Office 中已经习惯了这种操作。是的,对于您拥有的每个解决方案,您都需要执行此操作。 - Teoman Soygul
它为什么会“随机”崩溃?这是我做错了什么吗? - Simon Dugré
2
我不知道为什么程序会崩溃,但我以前经常遇到这种情况。现在,我使用一个简单的 .bat 脚本,它由解决方案中的最后一个构建项目调用,来完成所有复制工作,这样就能避免所有这些麻烦。这可能是程序崩溃的原因之一:http://connect.microsoft.com/VisualStudio/feedback/details/114694/msb3021-unable-to-copy-file-bug-still-not-fixed-in-final-version - Teoman Soygul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接