2011-04-15 112 views
6

我有一段时间的问题(因为我使用visual studio 2010)。当我试图在我的Web应用程序上启动调试时,我从VS.net环境中随机获取此错误:Visual Studio 2010:无法在调试时复制文件

错误1无法将文件“obj \ Debug \ SolutionName.exe”复制到“bin \调试\ SolutionName.exe”。该进程无法访问文件'bin \ Debug \ SolutionName.exe',因为它正在被另一个进程使用。

摆脱此错误的唯一方法是重新启动Visual Studio(以便很快返回错误,类似于每天两次)。

在互联网上搜索了一下后,我发现这就是它可能增加预BUIL,从这里MSDN Link

所有我发现是写在预生成事件的东西,做一些文件处理...好(反正它不起作用)。

问题1:有没有更简单的方法来解决这个问题(对于所有人来说)
问题2:这个问题的确切原因是什么?

回答

3

这与阴影复制有关。

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" 

就可以就可以在web.config中像这样禁用在Windows中完全禁用ShadowCopy服务,这样就不必为所有解决方案设置这些值,但这会破坏很多功能,所以我不推荐它。

您可以随时使用自定义批处理脚本,通过最后一个项目的postbuild事件(按照构建顺序)调用,该事件将执行所有复制业务(我现在使用)。

+0

我必须把它放在每个解决方案中?有点奇怪!为什么我必须这样做?我的意思是,如果有一个暗中拷贝来做它,为什么它不工作? – 2011-04-15 13:44:33

+1

我们将进行影子复制以备份您的解决方案,以便Visual Studio崩溃时,您可以恢复上次的状态和文件。我相信你已经习惯了Office的这一点。是的,您需要为每个解决方案都做到这一点。 – 2011-04-15 13:47:57

+0

有没有任何理由为什么它“随机”崩溃?这是我做错了什么吗? – 2011-04-15 13:59:40

相关问题