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

本文关键字:锁定 文件 构建 Visual Studio 2010 | 更新日期: 2023-09-27 18:17:40

你好,Stackoverflow.

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

无法复制文件"obj'x86'Debug'TileEngine.exe"本' x86 '调试' TileEngine.exe"。进程无法访问'bin'x86'Debug'TileEngine.exe'文件,因为该文件正在被其他进程使用。

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

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

我尝试了不同的解决方案,无论是在这个网站上,还是在谷歌上,我都能找到。

我找到了一些解决方案,但对我不起作用

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

在Stackoverflow上的一些不同问题中,我发现了一个解决方案,即进入Project Properties > Build Events,然后在预构建事件命令行添加:

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-file从obj'debug复制到bin'debug,我找到了另一个解决方案,包括在Properties'AssemblyInfo.cs文件中更改AssemblyVersion"2.0.0.0"。然而,这对我来说没有任何影响。

解决方案4 -在构建

之前关闭UserControl设计器

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

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

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

如果有人能够在这个问题上传播一些光线,那将是非常棒的,因为它真的阻止了我编写任何东西,因为我不喜欢等待10分钟,因为我一直在做2秒的更改。

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

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

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

基本上,我的程序从来没有完全正确退出,即使它看起来是。它将继续运行,从而继续锁定文件。

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

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

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

通常,这是一个线程启动和遗忘,或一个Async任务永远不会完成,或类似的东西。

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

如果你的程序仍然在运行,尽管尽最大努力关闭所有线程和其他阻塞,你可以使用非常脏的坏方法:在onexit(…)中运行代码"System.Diagnostics.Process.GetCurrentProcess().Kill();"这将以任务管理器的方式强制关闭当前进程…

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

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

并感谢对方回答我已经得到了。Stackoverflow太棒了!

您检查过是否有文件被防火墙阻止了吗?当我切换到Avast的完整版本时,我发现我必须禁用文件系统屏蔽,它喜欢在我试图运行我的visual studio项目时删除我的可执行文件。

我在升级到VS2012 Professional时遇到了问题。(SDK, .Net, Visual c++可重新发布包)

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

我所做的是我最终卸载了与visualstudio下载相关的所有内容。如果你能够删除并保存你的项目文件在其他地方,然后把它们带回来。检查你所有的程序文件,看看是否有东西藏在错误的文件夹里,并检查你的C盘。

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

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

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

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

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

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

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

我解决了这个问题。我注意到这个错误,当我把一些图像在我的应用程序在同一个解决方案文件夹。

  • 我已经从应用程序中删除了所有的图像和资源,没有它保存。
  • 移动图像到外部解决方案文件夹
  • 打开解决方案并再次添加这些图像,使用控件中的"导入"按钮。

如果你要这样做,记得在"项目设置"中使用"应用程序图标"。

现在,我一切都很好。

我希望它有帮助。

你需要禁用Windows Indexer,因为它会锁定文件

遵循本指南如何禁用

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

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