Visual Studio"无法复制"....在构建期间

bra*_*ing 328 c# build process visual-studio-2012

在构建我的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.    
Run Code Online (Sandbox Code Playgroud)

现在我已经发现杀死这个过程了

Weingartner.WeinCad.vhost.exe
Run Code Online (Sandbox Code Playgroud)

工作(有时),但这让我很紧张.有什么方法可以阻止这种情况发生吗?

我的调试器设置是

在此输入图像描述 在此输入图像描述

Ger*_*ard 363

我在Visual Studio 2013中遇到过类似的错误消息.

大多数情况下,我发现由于异常导致调试进程停止时出现这种情况.

当clean + build没有为我解决这个问题时,我通过执行以下操作取得了成功:

  • 关闭Visual Studio
  • 删除binobj文件夹,和
  • 重新打开Visual Studio.

自Visual Studio 2003以来,这个"bug"已经存在.

最后,我还发现我可以通过简单地重命名可执行文件然后删除它来解决这个问题.

  • 这不是解决方案,最好是部分解决方案.我不想每10分钟重启一次VS. 清洁解决方案对我有用,但每隔10分钟清洁一次也不是解决方案. (54认同)
  • 我有同样的问题,但重新启动VS后,我得到一个版本,文件再次被锁定.. (47认同)
  • 在 VS 2022 中也能实现这一点。 (13认同)
  • VS 2019中仍然存在该错误。 (12认同)
  • 同样在这里,VS2013.退出,删除构建工件,重新启动 - >一切都很好. (8认同)
  • 根据我的经验,无论我在开发哪种机器,VS2013每天至少为我做10次.这就像虫子变得更糟.只是在说' (7认同)
  • 对此没有任何永久的解决方案吗? (4认同)
  • 是啊...问题仍然存在罪恶2017 ...非常讨厌. (3认同)
  • 我关闭了Visual Studio.杀死了WcfHost.exe进程.删除发生错误的项目的bin/obj文件夹.启动VS并且没有更多错误. (2认同)
  • 您的应用程序的 .exe 文件可能是一个挂起的进程,这意味着您将无法删除该文件。如果您在资源监视器中结束挂起的进程,您将能够删除 bin 文件夹并再次构建。 (2认同)

Geo*_*off 106

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

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)
Run Code Online (Sandbox Code Playgroud)

这将优雅地删除任何旧的PDB文件(如果可以),然后重命名带有.old.pdb扩展名的任何内容.一个很好的副作用是,如果旧的PDB仍然被锁定,它只是将另一个.old片段添加到文件名中,并且下次重新启动Visual Studio并进行构建时它们都会被清除.

例如,构建/调试会话1保持MyProject.pdb锁定状态.
下次构建时:
MyProject.pdb- >MyProject.old.pdb

然后,构建/调试会话2被启动,并且 MyProject.pdbMyProject.old.pdb仍被锁定:
MyProject.old.pdb- > MyProject.old.old.pdb
MyProject.pdb- >MyProject.old.pdb

最后,重新启动Visual Studio并进行全新构建将摆脱这两者,并像往常一样继续该过程.

  • 谢谢你,完美地为我修改你的例子而不是使用exe文件.我认为这可能是最新的VS 2015 CTP中的一个错误. (7认同)
  • 同样在VS2010,VS 2012中 (5认同)
  • 我讨厌必须在校长这样做,但它有效,所以就是这样!:)感谢分享这颗珍珠,杰夫! (3认同)
  • 最新(2018-03-11)Visual Studio 2017 v15.6.1:仍然是一个问题。调试、异常、目标目录中的程序集被锁定。上述将 *.pdb 更改为 *.dll 的解决方案仍然适用。 (2认同)
  • 为了节省一些时间...要添加此内容,请右键单击您的项目名称,选择“属性”,展开“构建”,选择“事件”并将其输入“预构建事件”文本框。 (2认同)

Rus*_*ini 63

这是因为您关闭了应用程序,但它仍然在后台运行.

临时解决方案:

  • 转到任务管理器(Ctrl+ Alt+ Esc).
  • 转到进程选项卡,找到"YourProjectName.exe".
  • 如果找不到您的流程,请选中"显示所有用户的流程".
  • 结束处理它.

永久解决方案:您必须通过编码关闭您的应用程序.这是代码......

System.Windows.Forms.Application.Exit();
Run Code Online (Sandbox Code Playgroud)

您必须将此代码以所有形式放入表单的结束事件中.例:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}
Run Code Online (Sandbox Code Playgroud)

  • 这正是它。Visual Studio 崩溃了,IIS Express 仍在运行(就我而言)。我所要做的就是打开任务栏并右键单击 IIS Express 图标并退出。谢谢你。 (2认同)

gbj*_*anb 25

.vhost.exe是一个调试程序进程,因此看起来正在调试的进程没有正确关闭.有可能你有一个让它保持活动并且没有正确停止调试过程的错误 - 当你点击'停止调试'而不是实际杀死调试器时,有一些选项可以从进程中分离出来,所以也许你有这个设置.

但这就是问题 - 您尝试复制的文件被操作系统锁定(即仍在使用),因此它会阻止复制.确保该文件是免费的,您将能够复制.


pat*_*zzi 22

我通过在任务管理器中杀死IISExpress来解决它


小智 20

您应该禁用防病毒软件(特别是如果它是Avast),然后重试.它帮助了我.问题是调试器/构建器会创建由Avast识别为威胁的.exe文件,因此在VS可以执行之前将其删除.


Nai*_*air 15

通过提供以下预构建操作,我能够解决这个问题(VS 2010);

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

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)


小智 12

引用:

解决方法是将其放在>项目的预构建事件命令行属性中(在构建事件选项卡中):

代码片段

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

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"
Run Code Online (Sandbox Code Playgroud)


iTa*_*chi 7

例外

在某些情况下,在运行 IISExpress 时(Build || Rebuild)在Visual Studio中 遇到此异常:

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

  1. 右键单击需要构建的Web项目.
  2. 单击属性.
  3. 选择左侧的Build Events选项卡.
  4. 在Pre-build events命令行中粘贴以下2行:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"
Run Code Online (Sandbox Code Playgroud)

你很好2去!


小智 7

请按照以下步骤操作

  1. 打开任务管理器(Ctrl+Alt+Delete)
  2. 在“性能”选项卡下,选择“< ProjectNameOfYours.exe >”。
  3. 单击结束进程。
  4. 现在构建解决方案。

以上步骤永久解决了错误:)


Iva*_*lla 6

我想我解决了它Break all processes when one process breaks在调试选项中删除复选标记(操作的第一个屏幕截图->第二个选项)。
自从我取消选中它以来,它一直在构建/运行良好。
我在我的项目中使用 MySql NET 连接器和 DevExpress 控件。可能是因为这个标志被激活,其中之一没有很好地处理连接、绑定等。

编辑:绝对有效!不再有“无法复制文件”,也不再有表单设计器错误。


Ogg*_*las 6

杀死进程w3wp.exe(IIS)通常会解决这个问题.
通常,您可以通过导航到bin文件夹并尝试删除它来了解锁定文件的进程.如果另一个进程正在使用它,将弹出的错误消息将包含需要被杀死的进程的名称.


Car*_*doc 6

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

所以不要这样

在此输入图像描述

我把它改成了这个

在此输入图像描述

请注意,我刚刚将其更改Increment and RecallIncrement_Recall,我只是删除了空格.它现在对我很好.


Ste*_*net 5

我的 10 美分贡献。

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

我发现切换编译目标可以解决问题。

试试这个:如果你在 DEBUG 中切换到 RELEASE 和 build,然后回到 DEBUG。问题消失了。

斯特凡诺


Gen*_*man 5

如果所有答案都不起作用,请尝试这个简单的检查。查找任何正在运行并保存项目 EXE 的 MSbuild.exe。杀死 MSBuild.exe 然后你就可以开始了。


归档时间:

查看次数:

283811 次

最近记录:

5 年,10 月 前