首页 文章

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

提问于
浏览
278

在构建我的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

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

我的调试器设置是

enter image description here

enter image description here

30 回答

  • 2

    我在Windows 8上的VS 2012版本11.0.60610.01更新3上遇到了同样的问题

    没有打开设计器窗口,项目是一个简单的控制台应用程序 .

    由于进程未访问该文件,因此删除访问该文件的vshost进程大多数时间都不起作用 .

    工作且花费最少时间的最简单的解决方法是从解决方案中删除项目,在解决方案中构建另一个项目,然后添加原始项目 .

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

    希望这可以帮助...

  • 2

    this other answer . 基本上,您可以在后台使用资源文件中运行MSBuild.exe进程 . 如果您有任何前置或后置构建任务导致MSBuild通过命令行启动,请尝试将"/nr:false"标志添加到此命令 . 但同样,请参阅前面的答案以获取更具体的细节 .

  • 2

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

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

    在Visual Studio 2013(Update 3)中构建时 .

    解决方案:在Visual Studio 2013中卸载“Productivity Power Tools” .

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

  • 1
    • 打开项目属性[menu> project> properties]

    • 选择"debug"标签

    • 取消选中"Enable the visual studio hosting process"

    • 开始调试[F5]

    • 您将收到安全警告,只需"ok" . 让应用程序运行

    • 停止调试 .

    • 检查选项"Enable the visual studio hosting process",在调试选项卡下,

    • 现在,尝试开始调试,你不会再看到错误

    [为我工作]

  • 21

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

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

  • 2

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

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

    如果干净的构建还没有为我解决这个问题,我通过执行以下操作取得了成功:

    • 关闭Visual Studio

    • 正在删除 binobj 文件夹,以及

    • 重新打开Visual Studio .

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

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

  • 25

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

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

    请按照以下步骤操作

    • 打开任务管理器(Ctrl Alt Delete)

    • Performance 选项卡下,选择< ProjectNameOfYours.exe > .

    • 单击“结束进程” .

    • 现在构建解决方案 .

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

  • 5

    对我来说,Avast防病毒软件不会让visual studio写入/读取/执行文件 . 所以我不得不将Visual Studio 2010/2012文件夹添加到防病毒排除列表中 . 就在那之后......它有效 .

  • 1

    我10美分的贡献 .

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

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

    试试这个:如果你在DEBUG切换到RELEASE并构建,那么回到DEBUG . 问题消失了 .

    斯特凡诺

  • 1

    如果没有答案可行,请尝试这个简单的检查 . 查找运行并保存项目EXE的任何MSbuild.exe . 杀死MSBuild.exe,你应该好好去 .

  • 11

    如果你是 debugging T4 templates ,那么这种情况一直都会发生 . 我的解决方案(在MS修复此问题之前)只是为了杀死这个过程:

    任务管理器 - >用户 - > T4VSHostProcess.exe

    此过程仅在调试T4模板时出现,而不是在运行T4模板时出现 .

  • 4

    引用:

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

    代码片段

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

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

  • 2

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

    所以不要这样

    enter image description here

    我把它改成了这个

    enter image description here

    请注意,我刚刚将它从 Increment and Recall 更改为 Increment_Recall ,我只是删除了空格 . It is now working fine to me.

  • 1

    我没有意识到我仍然附加了我的调试器,并试图在同一个Visual Studio实例中构建 . 一旦我停下来我能够构建的调试器 .

  • 4

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

    这是我工作日最烦人的部分 . :)

  • 1

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

    临时解决方案:

    • 转到任务管理器(Ctrl Alt Esc) .

    • 转到“进程”选项卡,然后找到"YourProjectName.exe" .

    • 如果找不到您的流程,请检查"Show processes from all users" .

    • 结束处理它 .

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

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

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

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

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

  • 1

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

    如果你正在运行一个控制台应用程序:在你做任何事情之前 .

    确保已关闭可能已从先前版本打开的任何控制台窗口 . 例如,我只是在控制台应用程序中测试一些代码,我没有意识到以前我运行程序之一的控制台窗口是打开的 . 在那个会话期间我正在调试,窗口被推到后面,我看不到它 . 只是说,这可能是你的问题,所以检查以确保这不是问题 .

  • 1

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

  • 20

    在我的例子中,它是Resharper Unit Tests的跑步者(加上NUnit测试,从未遇到MsTests的这样的问题) . 杀死进程后,能够重建进程,无需重启OS或VS2013

  • 4

    @ 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
    
  • 6

    我终于如何解决它 . 为什么我们不能在第一次调试后继续调试,因为第一个调试exe仍在运行 . 因此,在第一次调试之后,您需要转到任务管理器 - >进程选项卡 - > [您的项目名称exe]结束exe进程 .

    这个对我有用 :)

  • 1

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

  • 2

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

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

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

    例如,构建/调试会话1使 MyProject.pdb 锁定 .
    下次你 Build :
    MyProject.pdb - > MyProject.old.pdb

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

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

  • 100

    我无法给出解决方案来防止这种情况发生,但你至少可以重命名锁定的文件(Windows资源管理器或经典命令窗口),然后编译/构建 . 无需重启或重启VS201x . 根据一些经验,您可以添加预构建脚本来删除旧文件,或者在有锁定的情况下重新命名 .

  • 3

    我想我解决了它在调试选项中删除了复选标记 Break all processes when one process breaks (op的第一个截图 - >第二个选项) .
    由于我取消选中它,它已经 Build /运行了一段时间 .
    我在我的项目中使用MySql NET Connector和DevExpress控件 . 可能是其中一个没有处理连接,绑定等,因为这个标志beeing激活 .

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

  • 2

    确保关闭所有实例 wcfSvcHost 然后重试 . 它对我有用!

  • 52

    例外

    在某些情况下,当您在 running IISExpress之上(Build || Rebuild)在Visual Studio中遇到此异常时:

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

    解决方案

    • 右键单击需要构建的Web项目 .

    • 点击属性 .

    • 选择左侧的“构建事件”选项卡 .

    • 在预构建事件命令中线贴这两行:

    tasklist / fi“imagename eq iisexpress.exe”| find“:”> nul
    if errorlevel 1 taskkill / f / im“iisexpress.exe”

    你很好2去!

相关问题