Visual Studio“无法复制”…在构build过程中

在构build我的VS2012 C#项目的过程中,我一直收到这个错误

Error 41 Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to "bin\Debug\WeinGartner.WeinCad.exe". Exceeded retry count of 10. Failed. Error 42 Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to "bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file 'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another process. 

现在我已经知道杀死这个过程

 Weingartner.WeinCad.vhost.exe 

(有时)工作,但这让我感到紧张。 任何方法来阻止这一切发生?

我的debugging器设置是

在这里输入图像描述在这里输入图像描述

我遇到了VS 2013中的错误信息。
大多数情况下,当debugging进程停止在exception的某个地方时发生。
当clean + build没有效果时,closuresVS,直到现在一直删除'bin'和'obj'文件夹,直到现在总是解决了这个问题。

自VS2003以来就存在这个错误。 另外:重命名文件往往是可能的,然后你可以删除它。

在Visual Studio Premium 2013(更新3)中,我使用预先构build的单行程序解决了这个问题:

 (if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 

这将优雅地删除任何旧的PDB文件(如果可以的话),然后重命名任何剩余的.old.pdb扩展名。 一个不错的副作用是,如果旧的PDB仍然被locking,它只是添加另一个.old片到文件名,他们都清理下一次你重新启动Visual Studio并进行构build。

例如,构build/debugging会话1 MyProject.pdblocking。
下次你build立:
MyProject.pdb – > MyProject.old.pdb

然后,build立/debugging会话2被启动,并且MyProject.pdbMyProject.old.pdb仍然被locking:
MyProject.old.pdb – > MyProject.old.old.pdb
MyProject.pdb – > MyProject.old.pdb

最后,重新启动Visual Studio并重新创build将会消除这两个,并像往常一样继续进行。

这是因为你已经closures你的应用程序,但它仍然在后台运行。

临时解决scheme:

  • 转到任务pipe理器( Ctrl + Alt + Esc )。
  • 转到“进程”选项卡并find“YourProjectName.exe”。
  • 结束处理它。

永久解决scheme:您必须通过编码closures您的应用程序。 这里是代码…

 System.Windows.Forms.Application.Exit(); 

你必须把这个代码放在窗体的closures事件中。 例:

 private void frm_menu_FormClosing(object sender, FormClosingEventArgs e) { System.Windows.Forms.Application.Exit(); } 

.vhost.exe是一个debugging器进程,所以看起来被debugging的进程没有正确closures。 机会是你有一个错误,它保持活着,并没有停止正确的debugging过程 – 当你点击“停止debugging”,而不是实际上杀死debugging器,所以也许你有这个设置,有选项可以脱离进程。

但是这就是问题所在 – 你试图复制的文件被操作系统locking(即仍在使用),所以它阻止了复制。 确保文件是免费的,你可以复制。

您应该禁用您的防病毒(特别是如果它是一个Avast),然后再试一次。 它帮助了我。 问题是debugging器/构build器创build.exe文件被识别为Avast的威胁,因此在它可以被执行之前被删除。

我通过在任务pipe理器中查杀IISExpress解决了这个问题

通过提供以下预构build操作,我能够解决此问题(VS 2010)

 if exist "$(TargetPath).locked" del "$(TargetPath).locked" if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 

引用:

解决方法是将其放置在>项目的Pre-build event命令行属性中(在“生成事件”选项卡中):

代码片段

 if exist "$(TargetPath).locked" del "$(TargetPath).locked" if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 

杀死进程w3wp.exe(IIS)通常会解决这个问题。
通常,您可以通过导航到bin文件夹并尝试删除文件来知道对文件具有locking的进程。 如果另一个进程正在使用它,将popup的错误消息将包含需要被终止的进程的名称。

我在Windows 8的VS 2012版本11.0.60610.01 Update 3上面临同样的问题

没有打开devise器窗口,该项目是一个简单的控制台应用程序。

访问该文件的vshost进程的删除大部分时间不工作,因为进程没有访问该文件。

最简单的解决方法是,从解决scheme中删除项目,在解决scheme中构build另一个项目,然后添加原始的后台。

这是一个刺激和浪费时间,但这是我知道的所有其他选项中最便宜的。

希望这可以帮助…

添加主项目taskkill / f / fi“pid gt 0”/ im“YourProcess.vshost.exe”的预生成事件

例外

在Visual Studio中的某些情况下(Build || Rebuild)在运行 IISExpress的时候遇到了这个exception:

无法将文件“obj \ Debug \ YourProjectName.dll” 复制到bin \ YourProjectName.dll中, 进程无法访问 “bin \ YourProjectName.dll”文件, 因为它正被另一个进程使用

  1. 右键单击需要构build的Web项目。
  2. 点击属性。
  3. select左侧的“生成事件”选项卡。
  4. 在预生成事件命令行中粘贴这两行:
 tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul if errorlevel 1 taskkill /f /im "iisexpress.exe" 

你好2 GO!

似乎通过更改项目的程序集名称可以解决问题。

所以,而不是这个

在这里输入图像描述

我改变它到这个

在这里输入图像描述

请注意,我只是将其从Increment and Recall更改为Increment_Recall ,我只是删除了空格。 现在对我来说工作正常。

解决方法:重新启动OS,它总是为我工作,由于vshost进程有时不能结束。

包括VS2013在内的VS系列版本也存在这个bug。

你可以参考下面的链接: http : //connect.microsoft.com/VisualStudio/feedback/details/533411

我不能给一个解决scheme,以防止这种情况发生,但你至less可以重命名locking的文件(Windows资源pipe理器,或经典的命令窗口),然后编译/构build。 无需重新启动或重新启动VS201x。 有了一些经验,你可以添加一个预生成脚本来删除旧文件,或者在有锁的情况下重新命名。

看到这个其他的答案 。 基本上,你可以在后台运行MSBuild.exe进程消耗资源文件。 如果你有任何事先或后期的生成任务,导致一个MSBuild通过命令行启动,尝试添加“/ nr:false”标志到这个命令。 但是,再次看到以前的答案更具体的细节。

@Geoff的( https://stackoverflow.com/a/25251766/3739540 )答案是好的,但它会在重新编译时抛出错误代码1。

这是对我有用(2> nul 1> nul结束+退出0):

 (if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul (if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul exit 0 

我想我解决了这个问题,删除复选标记,以便在Debug选项中的Break all processes when one process breaks (op的第一个截图 – >第二个选项)。
自从我没有选中它之后,它一直在build造/运行良好。
我在我的项目中使用MySql NET连接器和DevExpress控件。 可能是其中之一,并没有configuration连接,绑定等,因为这个标志beeing激活。

编辑:绝对有效! 没有更多的“无法复制文件”,没有更多的表单devise器错误。

如果你正在debuggingT4模板 ,那么这一直都是这样。 我的解决scheme(MS修复之前)只是为了杀死这个过程:

任务pipe理器 – >用户 – > T4VSHostProcess.exe

这个过程只在debuggingT4模板时出现,而不是在运行时。

我终于如何修复它。 为什么我们不能在第一次debugging之后继续debugging,因为第一个debuggingexe仍在运行。 所以,第一次debugging后,你需要去任务pipe理器 – >进程选项卡 – > [您的项目名称exe]结束exe进程。

它适用于我:)

这个问题是寻找以下错误时的第一个结果:

无法复制文件“…”,因为找不到它。

在Visual Studio 2013(更新3)中构build时。

解决scheme:卸载Visual Studio 2013中的“生产力电动工具”。

https://connect.microsoft.com/VisualStudio/feedback/details/533411

在我的情况下,它是Resharperunit testing运行(加上NUnittesting,从来没有与MsTests这样的问题)。 杀死进程后,能够重build进程,而无需重新启动OS或VS2013

我没有意识到我仍然有我的debugging器附加,并试图build立在相同的Visual Studio实例。 一旦我停止debugging器,我能够build立。

杀死vstest.executionengine.exe进程可以为我解决这个问题90%的时间。 如果这不起作用,那么也杀死QTAgent32.exe ,然后删除有问题的项目的/ bin和/ obj文件夹。

这是我工作当天最烦人的部分。 🙂

对我来说,这是Avast的防病毒,不会让Visual Studio写/读/执行文件。 所以我不得不将Visual Studio 2010/2012文件夹添加到防病毒排除列表中。 然后,这个包就行了。

确保你closures了所有的实例wcfSvcHost并重试。 它为我工作!

我注意到一些答案解决了我的问题,但是,以防万一有人遇到同样的问题。

如果您正在运行一个控制台应用程序:在您做任何其他事情之前。

确保你已经closures了可能已经从以前的版本打开的任何控制台窗口。 例如我只是在控制台应用程序中testing一些代码,我没有意识到从前一次我运行我的程序的控制台窗口是打开的。 在那次会议上,我正在debugging,窗户被推到后面,我看不到它。 只是说,这可能是你的问题,所以检查,以确保不是问题。

我的10美分贡献。

我在VS 2015 Update 2上偶尔会遇到这个问题。

我发现切换编译目标解决了这个问题。

试试这个:如果你在DEBUG切换到RELEASE并build立,然后回到DEBUG。 问题没有了。

斯特凡诺

  1. 打开项目属性[menu> project> properties]
  2. select“debugging”选项卡
  3. 取消选中“启用Visual Studio托pipestream程”
  4. 开始debugging[F5]
  5. 您将收到安全警告,只是“好”。 让应用程序运行
  6. 停止debugging。
  7. 选中“启用Visual Studio宿主进程”选项,在debugging选项卡下,
  8. 现在,尝试开始debugging,你将不会再看到错误

[为我工作]

如果我使用VS2012编辑WP8上的Xaml页面,每次部署时都会得到这个信息。

我需要不打开Xaml页面或使用进程资源pipe理器来终止进程XDesProc.exe。

如果你得到这个错误,那么我build议使用进程资源pipe理器来查看发生了什么(即使它是一个不同的问题)。 只要find进程“WeinGartner.WeinCad.exe”,它应该显示进程和处理访问文件(至less在杀死虚拟主机文件没有解决问题时)。