首页 文章

构建错误:“进程无法访问该文件,因为它正由另一个进程使用”

提问于
浏览
70

我有一个C# webforms 应用程序,直到今天才一直在游泳 .

现在,突然间,每次我尝试运行应用程序时,都会出现文件锁定错误:

无法将文件“obj \ Debug \ MyProject.exe”复制到“bin \ Debug \ MyProject.exe” . 该进程无法访问文件“bin \ Debug \ MyProject.exe”,因为它正由另一个进程使用 .

谷歌搜索错误没有提出任何超出明显的,即VS认为文件被锁定 . 它是 definitely Visual Studio本身锁定文件,因为当我关闭VS并重新打开它时,项目执行正常 - 第一次 . 当我第二次尝试运行它时,我收到文件锁定错误 .

每次我想运行应用程序时关闭VS并重新打开都不是一个可行的解决方法!如何找出锁定文件的内容,并阻止其被锁定?

EDIT: 另一个有趣的发现:我甚至不必运行该应用程序 . 只需编译一次就会导致文件锁定;我不能连续两次编译!

此问题特定于我的解决方案中的一个项目 . 所有其他项目都可以正常工作,并且可以根据需要执行多次 . 只有这一个项目才会被锁定 .

21 回答

  • 8

    我通过重命名锁定的文件(使用Windows资源管理器)克服了这个问题 . 我不被允许删除该文件,但重命名锁定的文件有效!

  • 0

    我找到了一个适合我的简单解决方案 . 它是这样的:

    出现问题时,只需更改顶部的构建配置(如果在“Release”中更改为“Debug”,反之亦然),构建然后再更改回以前的配置并再次构建 .

    screenshot

    我想更改配置会释放vcshost和devenv .

  • 0

    从“运行”框中运行此命令:

    net stop iisadmin /y
    

    然后

    iisreset
    

    为我工作 . vs 2003

  • 1

    VS2017 - 通过关闭Windows任务管理器中的所有MSBuild.exe实例来解决

  • 0

    对我有用的是重启IIS

  • 5

    最近在尝试构建我正在研究的解决方案(不仅仅是winforms proj)时遇到了这个问题 .
    除了 build 失败之外,我注意到清理项目会悄然失败(检查bin文件夹显示文件实际上没有被删除)并且关闭Visual Studio并没有结束 devenv 进程 - 而是导致它崩溃 . 然后,Windows恢复过程将重新启动Visual Studio .

    经过一些反复试验后,我发现问题只发生在我启动VS的"Recent"菜单中打开解决方案时 .
    Opening the solution from File >> Open >> Project/Solution found it working as per usually.

    目前不知道为什么 - 将继续关注这一点,但就目前而言,至少我可以工作!

  • 1

    当我结束这个过程 .Net Core Host 时,一切都很好 . 我没有关闭Visual Studio或更改任何其他内容 .

  • 0

    我也有同样的问题 . 更改调试/发布配置并不能解决问题 . 至少不是没有在两者之间 Build .

    在我的解决方案(winform)中,它通过在设计器中打开winform的mainform来解决 . 切换到代码(F7) . 然后关闭代码,关闭winform的设计者并重建所有(ctrl-shift-B) . 这对我有用 .

    似乎winform应用程序(运行后台工作程序)中的某种句柄仍然在其他一些库上使用了文件句柄 .

  • 1

    在我的情况下,有一些vstest进程在运行(各种名称,但都包含字符串vstest) . 我不得不在taskmgr中终止它们 .

  • 3

    我有两个Visual Studio实例打开了相同的解决方案 .

  • 0

    您的Web应用程序是如何配置的?它是在Cassini(托盘Web服务器)还是IIS下运行?

    但这不应该正常发生 . 我认为ProcessExplorer可以告诉你进程锁定了哪些文件 . 如果不是进程资源管理器的其他sysinternals工具之一 .

    在下载其中一个SI工具之前尝试的一件事是停止Cassini Web服务器,看看是否可以释放文件 .

  • 2

    稍微迟到了,但我通过转到项目的属性>选项卡“Debug”>取消选中“启用Visual Studio托管过程”来解决这个问题 .

  • 0

    对我来说,它是一个已安装并运行的Windows服务 . 一旦我停止它,构建成功 .

  • 104

    同样的错误,通过更新Google Nuget支持包解决

  • 1

    实际上你应该想要“启用Visual Studio托管过程” . 至少VS2010至少 . 我也有:

    如果存在“$(TargetPath).locked”del“$(TargetPath).locked”如果存在“$(TargetPath)”如果不存在“$(TargetPath).locked”move“$(TargetPath)”“$(TargetPath) .locked”

    在预构建选项中 . 这个问题困扰了我很长一段时间,直到John W.提到这个复选框,我甚至注意到它存在并且很低,并且它已经没有被检查 .

    另请注意,即使没有调试,-app-vshost.exe也会在后台运行 . 这就是每次我猜它成功构建和运行的原因 . 它以前没有运行过 . 我还尝试清理调试和释放文件夹并不断更改目标类型,除上述情况外没有任何工作 . 之前我的解决方案是在构建之间等待5分钟,这使得完成任务变得非常烦人且耗时 . 我没有看到行为的任何变化,其中重要的是打开或XNA与Windows窗体或打开设计器的选项卡 . 此问题发生在32位或64位版本中,如果我使用ALT-F4杀死应用程序或使用任务管理器将其终止,这无关紧要,从理论上讲,这将不允许应用程序关闭或释放资源 . 起初我以为是一个垃圾收集问题 .

  • 16

    只是扔我2美分 . 通过打开任务管理器并终止应用程序解决了我的问题 . 它在后台运行,没有任何迹象表明它一直在运行(任务栏中没有项目,没有ui,没有),但我不确定为什么会这样 . 显然调试器没有运行,我当时只打开了一个VS的实例 . 令人惊讶的是,这仍然在VS 2017中发生 .

    也许我可以添加一个构建步骤来查找运行后台的应用程序并在启动新应用程序之前将其杀死 .

  • 4

    我通过删除文件夹bin \ Debug并可能重启VS来解决这个问题

  • 0

    好吧,我自己解决了这个问题 - 虽然我仍然不知道为什么 . 我决定通过从项目中删除所有文件来隔离问题,然后重新添加它们并确定哪个文件是我的麻烦来源 . 所以,我一个接一个地将文件重新引入项目,编译和清理每一步......直到...我添加了最后一个......

    ... and everything still worked fine.

    我对原始.csproj的源代码控制进行了比较;没有真正的差异 . 即使我尝试恢复到之前版本的.csproj,它仍然有效 .

    黑魔法 . 如果它有效,有时最好不要问为什么 - 只要接受它并继续前进......

    EDIT: 问题是反复出现的问题,我相信当编译器在编译时打开抽象/通用表单时,我已将其隔离 .

    Lesson learned: 确保在编译之前关闭任何抽象或通用表单或控件的表单设计器!如果没有,你必须关闭VS并重新打开!

  • 0

    我们在此处发现的内容如下:在项目属性页面的“调试”选项卡中,取消选中“启用Visual Studio托管过程” . 我不确定这个属性是什么,但它一旦取消选中就完成了工作 .

  • 1

    我在Visual Studio中的Xamarin应用程序遇到了同样的问题,通过拔掉我的测试移动设备解决了这个问题 . 应用程序已关闭,调试器已停止,但在尝试构建或重建解决方案时仍出现错误 . 它只是在我拔下设备后才停止,因为我不得不接听电话 .

  • 25

    只需检查引用并删除对项目的自引用 .

    说明:我的问题在创建自定义控件后开始,然后将其拖放到工具箱选项板中,以便在设计表单中使用它 . 首先出现了一个警告,说自定义控件源文件(.cs)和可执行项目(.exe)之间存在冗余 . 在执行/调试时出现错误:无法访问(.exe)因为它正被使用(并且它是真的) .

    我真的删除了关于自定义控件的整个源代码,问题仍然存在,直到我检查了引用并且它引用自身以便“能够”获得以前的自定义控件 . 我删除了参考并完成了!!

相关问题