16

你好,Stackoverflow。

最近,当我在 Visual Studio 2010 中编程时,我遇到了 VS 在尝试构建时锁定 bin/Debug/(ProjectName).exe 文件的问题,并在尝试构建项目后给了我以下错误10倍:

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

当我编辑源代码然后尝试调试时出现问题。我检查过使用不同的程序,唯一使用该文件的程序是 Visual Studio。

如果我在尝试构建之前等待大约 10 分钟,它似乎可以正常工作,但是在尝试不同的东西时,在尝试之前等待 10 分钟是不好的。

我在这个网站以及在谷歌上能找到的任何地方都尝试了不同的解决方案。

我找到了一些解决方案,但对我没有用

解决方案 1 - 使用预构建脚本

在 Stackoverflow 上的一些不同问题中,我找到了一种解决方案,您可以进入Project Properties > Build Events,然后在Pre-build 事件命令行中添加:

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

这使我可以比平时多构建一次项目,但是当再次编辑代码然后构建时,出现了同样的错误。

注意:尝试构建版本而不是调试构建似乎会破坏预构建脚本并以代码“1”退出,这似乎使 VS 无法正确构建。删除预构建脚本使其再次像“正常”一样工作,但仍然出现相同的错误。

解决方案 2 - 以管理员身份运行 Visual Studio

这是我找到的另一种解决方案,但对我来说也没有用,所以我假设 Visual Studio 已经拥有所需的所有权限,并且以管理员身份运行实际上并没有任何区别。

解决方案 3 - 更改 AssemblyVersion

在这个问题中,Visual Studio 构建失败:无法将 exe 文件从 obj\debug 复制到 bin\debug,我找到了另一个解决方案,包括将AssemblyVersion文件中的Properties\AssemblyInfo.cs, 更改为"2.0.0.0". 然而,这对我没有任何影响。

解决方案 4 - 在构建之前关闭 UserControl 设计器

根据互联网上一些不同的答案,Visual Studio 显然使用构建的项目可执行文件来渲染UserControl设计器(?)。就我而言,这可能不是它,因为我主要使用 XNA 而它不使用UserControl设计器。

解决方案 5 - 应用程序退出时清理资源

这可能是我未能正确实施的解决方案。我只是在想,如果这是解决方案,为什么我以前没有被要求这样做。我假设 XNA 会卸载通过Content管道加载的所有内容,因此这个解决方案没有任何实际意义。

如果有人能够对这个问题有所了解,那就太棒了,因为它阻止了我真正编程任何东西,因为我不喜欢等待 10 分钟,因为我做了 2 秒的更改每时每刻。

4

11 回答 11

2

我自己也遇到过几次这个问题。

我的可能与你的原因不同,但我会告诉你我出了什么问题以及我是如何解决的,希望它会对你有所帮助。

基本上,我的程序从未完全正确退出,即使它看起来如此。它会继续运行,从而继续锁定文件。

我最初使用的一个快速的脏修复(以及一种证明是否是这种情况的方法)是:

  • 打开任务管理器(Ctrl-Alt-Del)
  • 单击进程选项卡
  • 查找您的程序名称 (TileEngine.exe)
  • 注意:可能会有 name_vshost.exe (TileEngine_vshost.exe) 那是 VisualStudio 的东西,忽略它,它不相关。
  • 如果你找到它,这意味着你的程序实际上并没有完全退出。
  • 如果它在那里,请单击它并按“结束进程”

因此,如果它在那里,那么由于某种原因,您的程序没有像我的那样关闭。

通常,这来自于一个线程被启动和遗忘,或者一个永远不会完成的异步任务,或者类似的东西。

确保在 OnExiting(..) void 函数中杀死所有正在运行的线程。

如果您的程序仍在运行,尽管尝试关闭所有线程和其他阻止程序,您可以使用非常肮脏的坏方法:在 OnExiting(...) 中运行代码“System.Diagnostics.Process.GetCurrentProcess().Kill() ;" - 这将任务管理器式强制关闭当前进程...这只是作为一种紧急情况,我无法以任何其他方式工作。

于 2013-06-09T20:30:10.887 回答
2

我想我自己找到了解决方案。在项目属性中,未选中“启用 Visual Studio 托管进程”。检查它似乎已经解决了问题,至少现在是这样。

从 mcmonkey4eva 的帖子中得到了提醒。所以谢谢你=)

并感谢其他人回答我有。Stackoverflow 太棒了!

于 2013-06-10T09:45:31.223 回答
1

您是否检查过防火墙是否阻止了任何文件?当我切换到完整版的 Avast 时,我发现我必须禁用 File System Shield 它喜欢在我尝试运行我的 Visual Studio 项目时删除我的可执行文件。

升级到 VS2012 Professional 时遇到问题。(SDK、.Net、Visual C++ Redistributable 包)

确保所有这些都与您正在使用的 VS 的当前版本兼容

我所做的是,我最终卸载了与两个 Visual Studio 下载相关的所有内容。如果您能够将项目文件删除并保存在其他地方,然后将它们带回来。浏览所有程序文件以查看是否有任何隐藏在错误文件夹中的内容并检查您的 C 盘。

这意味着下载并重新安装(新鲜):

我想如果你清理你的程序文件,应该没问题。除非您非常确定自己在做什么,否则我不建议您进入您的注册表。如果您已经对寄存器进行了更改,那么我们将查看该选项和其他选项(如果这不能解决您的问题)。

于 2013-06-09T12:02:34.130 回答
1

尝试通过在文件夹级别取消选中来从解决方案中删除只读检查。

于 2013-06-10T09:53:23.380 回答
1

我遇到了这个问题,在我的情况下是由于解决方案中包含了 bin;一旦我从我的解决方案中排除了 bin 文件夹,问题就消失了。

于 2013-07-08T16:52:28.790 回答
1

没有任何帮助,没有预构建命令,设计师也没有关闭,但我找到了一种对我有帮助的方法,只是从调试更改为发布,反之亦然,释放锁定的文件,您可以在不关闭 IDE 的情况下删除它们。

于 2016-08-09T10:44:32.290 回答
0

如果我从 Debug 切换到 Release,然后立即 F5 编译,我经常会遇到这个问题。听起来很疯狂,例如,在模式之间切换后等待一分钟可以防止这种情况发生。

如果它被锁定,唯一的解决方案是关闭 Visual Studio 并重新打开。

于 2013-09-16T10:39:02.930 回答
0

我解决了这个问题,我在解决方案上组织了我的资源。当我将一些图像放在同一个解决方案文件夹中的应用程序上时,我注意到了这个错误。

所以,

  • 我从应用程序中删除了所有图像和资源,没有它就保存。
  • 将图像移动到解决方案文件夹之外。
  • 打开解决方案并再次添加此图像,使用控件上的“导入”按钮。

如果您要尝试此操作,请记住在项目设置上使用应用程序图标。

现在,一切对我来说都很好。

我希望它有所帮助。

于 2013-10-24T17:03:20.153 回答
0

您需要禁用 Windows 索引器,因为它会锁定文件

按照本指南如何禁用

于 2015-06-25T10:39:00.513 回答
0

就我而言,问题似乎是由远程调试器引起的。当您使用“x64”选项编译时,它会在本地机器上启动。尝试更改项目设置(属性/构建),直到达到最终版本。

于 2016-06-22T16:36:11.763 回答
0

将 Build Platform 目标从 x86 更改为 Any CPU。

于 2016-07-20T20:28:47.983 回答