在 Visual Studio 2010 中构建时锁定文件

Posted

技术标签:

【中文标题】在 Visual Studio 2010 中构建时锁定文件【英文标题】:Locking files when building in Visual Studio 2010 【发布时间】:2013-06-09 11:58:49 【问题描述】:

你好,***。

最近,当我在 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 分钟再尝试某些东西是不好的。

我在这个网站以及在 Google 上可以找到的所有地方都尝试了不同的解决方案。

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

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

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

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 build fails: unable to copy exe-file from obj\debug to bin\debug 中,我找到了另一个解决方案,其中包括将Properties\AssemblyInfo.cs 文件中的AssemblyVersion 更改为"2.0.0.0"。 然而,这对我没有任何影响。

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

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

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

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

如果有人能够在这个问题上传播一些信息,那就太棒了,因为它阻止了我真正编写任何东西,因为我不喜欢等待 10 分钟,因为我已经做了一个2 秒时刻变化。

【问题讨论】:

欢迎来到 ***。感谢您和+1 的努力,即使这是您的第一个问题。 谢谢!我在这里看到了很多其他不好的问题,不想自己做一个=) 这看起来像一个非常相似的问题,有一个明确的解决方案:***.com/questions/3906404/… 这个问题在一年前就解决了,不过还是谢谢=P 【参考方案1】:

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

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

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

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

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

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

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

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

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

【讨论】:

是的,这也是我的第一个想法。但是当查看任务管理器,甚至更高级的程序(如 Sysinternals Process Explorer)时,该进程并不存在。【参考方案2】:

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

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

感谢其他人的回复。 *** 太棒了!

【讨论】:

嗯...嗯,从技术上讲,这不是答案,但提醒我检查一些后来证明是答案的东西。但可以肯定 =) 这就是为我解决的问题。最近对 VS 的更新在我的项目中启用了这个选项,这是以前没有的。我正准备砸屏幕!【参考方案3】:

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

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

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

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

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

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

【讨论】:

是的,我不会尝试编辑注册表。尽管 CCleaner 在“修复”注册表错误时可能做错了什么。可能是?但是关闭文件系统屏蔽不起作用。还是同样的错误。以后有时间我会重新安装 Visual Studio。 是的,我有点怀疑 CCleaner 是这里的坏人。它试图删除 Visual Studio 使用的一些文件类型,如 .suo、.cpp、.h 和 .cs 文件类型。我已经尝试在 VS 安装程序中使用“更改/重新安装”选项,并让它做它真正做的事情,但没有任何改变,问题仍然存在。我希望我不需要重新安装 Windows。 我愿意,但那是很久以前的事了。我不确定从那以后我还做了哪些其他更改。 不,我没有,我只是在 VS Iso 中使用了安装程序。但无论如何,我似乎已经找到了解决问题的方法。至少是一个临时解决方案。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

【参考方案8】:

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

所以,

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

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

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

希望对你有帮助。

【讨论】:

【参考方案9】:

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

Follow this Guide how to disable

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

将构建平台目标从 x86 更改为 Any CPU。

【讨论】:

以上是关于在 Visual Studio 2010 中构建时锁定文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Visual Studio 2010 (msbuild?) 构建速度不快?

构建失败:Visual Studio 2010

在 Visual Studio 2010 (utility.obj) 中使用带有 VC++ 的 QuickFix 时出错

Visual Studio 2010 数据库项目部署

在 Visual Studio 2010 上安装 FLTK

Visual Studio 2010 上的 VC++:使用调试堆发布构建