无法在打开用户映射区段的文件上执行所请求的操作

每当我试图复制4个文件到我的bin文件夹,停止主服务后,我得到一个文件(TexteDll)错误。错误是:

Cannot copy TexteDll: The requested operation cannot be performed on a file
with a user-mapped section open

这可能是由于一些系统锁定。或者另一个进程正在使用这个DLL。当我在谷歌上搜索时,我发现重新启动系统可以解决这个问题。

有人能给出原因或者解决办法吗?我检查了TexteDll的属性(通用、版本、安全性等)。一切都很正常。

265488 次浏览

你在运行杀毒软件吗?有可能是AV软件(或其他软件)正在使用文件映射api读取文件,这导致了问题。

我也有同样的问题,在我的情况下,似乎现有的输出文件被其他应用程序锁定。

你可以用OpenedFilesView检查哪个应用程序锁定了你的输出文件: http://www.nirsoft.net/utils/opened_files_view.html < / p >

在我的例子中,是资源管理器锁定了调试文件夹中编译的DLL…很奇怪,不是吗?

我是用一个叫解锁的工具发现的。

必须用Unlocker删除,即使它说文件没有锁,我不能删除文件夹,直到我不删除那个文件……

之后,它进行了编译。

编辑:

我发现了为什么在我的案例中会发生这种情况。我在Visual Studio的文本编辑器中打开了DLL…

关闭VS上的所有文档,并尝试重新构建。如果不工作,重新启动VS.此问题与DLL文件的锁有关。

    有时,当您双击有关引用的警告时 程序集版本不匹配的两个或多个项目您忘记了 关闭程序集视图窗口,它就会留在那里 标签……所以最终程序集被VS锁定 它本身,它花了我相当多的时间来弄清楚:)

    注意VS提供的功率;)

  • 另一个虚拟场景。有时只是删除整个obj 文件夹或文件警告,作为锁定的一个有助于解决这个问题 李蹩脚的错误。< / >

关闭visual studio,删除bin,调试发布文件夹,重新启动visual studio项目。 这解决了我的问题

关闭Visual Studio并以管理员身份运行。它解决了我的问题。

我在用Ant构建Dot Net应用程序时看到了这些错误。

在我的例子中,它是我们公司的备份软件,赛门铁克DLO代理。停止它并排除我的杀毒软件中的目录并关闭Visual Studio似乎有效。

我遇到了这个错误,原来问题是FxCop对我的项目运行。我关闭了FxCop,然后我可以再次编译。

在我的情况下,我必须杀死一个正在锁定文件的MSBuild.exe进程(即使在我关闭Visual Studio之后,它仍然存在)。

我是一名开发人员,不喜欢把应用程序注入到像Unlocker这样的注册表中。 我使用了SysInternals进程管理器,该进程锁定了我的dll Find > Find Handle or Dll [Ctrl-F]并杀死了该进程

如果是web应用程序,删除临时ASP中的文件。NET Files文件夹可能是一个解决方案。

其他人已经确定此错误是由于另一个应用程序对该文件进行了锁定。只是想指出git diff也会锁定文件,直到你退出它。这就是我患病的原因。

如果你正在使用像AQ Time这样的分析器,这些也可能会锁定文件。在这种情况下,解决方案是重新启动分析器或简单地从分析器卸载/加载相关程序集。 对于AQ时间,我注意到它在一段时间后释放文件,但我不能告诉我的生活超时是什么。 似乎是随机的

我的解决方案是关闭所有VS实例,并杀死任何挂起的devenv.exe进程。

我也有同样的问题。重新开始对我没用。在任务管理器中运行着一个名为VBSCompiler的进程。我必须结束这个过程来修复这个错误。

这里发布的解决方案没有一个对我有效。它是devenv.exe (Visual Studio)锁定文件,但如果我重新启动它,它会重新锁定它。

奇怪的是,Windows不允许我删除文件(到回收站),但Shift+Delete(永久删除)可以。

删除obj文件夹并重新构建对我来说很有效

在我的情况下,删除项目根obj文件夹和重建项目解决了我的问题!

我的问题也通过筛选流程资源管理器解决了。然而,我必须杀死的进程是MySQL Notifier.exe,它在关闭所有VS和SQL应用程序后仍然在运行。

我也有同样的问题。我是这样决定的:

  1. 打开“任务管理器”
  2. 结束任务“Explorer.exe”
  3. 点击“文件”——>创建新任务——在“explorer.exe”中输入——>
  4. 清洁我的项目,它工作

它已经指出在2016年由安德鲁·卡斯伯特git diff锁定文件,直到你退出它。

对于git diff仍然是这样,但对于Git 2.23(2019年Q3),对于外部 diff工具(由Burkart的评论中报告),情况就不同了。

参见提交3 aef54e (11 Jul 2019) by 约翰内斯·辛德林(dscho)
(由Junio C Hamano—gitster提交d9beb46中合并,2019年7月25日)

diff:运行外部diff之前的munmap()文件内容

当从diff tool运行外部差异时,使用 假设我们想要写入所讨论的文件。
在Windows上,这意味着不能有任何其他进程持有一个打开的句柄 表示文件,甚至只是映射区域。

因此,让我们确保git diff本身没有持有任何有关文件的打开句柄。

事实上,我们将立即释放文件对,因为外部差异使用我们刚刚写入的文件,所以我们不再需要在内存中保存文件内容。

这修复了git-for-windows # 1315


运行“git diff"(man)”,同时允许外部差异处于未合并路径的状态,用于段错误,这已在Git 2.30 (Q1 2021)中更正。

参见提交d668518提交2469593 (06 Nov 2020) by Jinoh Kang (iamahuman)
(由Junio C Hamano—gitster提交d5e3532中合并,2020年11月21日)

diff:允许将NULL传递给diff_free_filespec_data()

< p > 签署人:Jinoh Kang
署名:Junio C Hamano

提交3 aef54e8b8(“diff: munmap()文件内容在运行外部差异之前”,Git v2.22.1)在run_external_diff,中引入了对diff_free_filespec_data的调用,该调用可以传递NULL指针。

修复此问题并通过使diff_free_filespec_data(NULL)为no-op来防止将来出现任何此类错误。

修复:3 aef54e8b8 ("diff: munmap()文件内容在运行外部diff")

以上都没有解决这个问题。

有人在我的解决方案集中有一个项目在构建配置中使用x64 CPU。将其更改为Any CPU会导致构建使用新文件夹。我仍然不知道哪个进程对那个文件有锁。

在我将项目目标CPU从'Any CPU'更改为'X64',然后返回'Any CPU'后发生在我身上。
通过删除Obj文件夹解决了这个问题(对于初学者:不用担心删除obj文件夹,它将在下一次编译中重新创建)

这是另一个。似乎由于正在使用文件句柄,就会发生这种情况。这就是为什么这个答案工作,我相信。对我来说,我从命令行输入了more project.csproj,并且忘记了我已经打开了它。所以把手是锁着的。
Sysinternals有一个整洁的命令行工具,名为handle,如果你偏爱命令行的话。你可以输入handle <partial name of whatever file or folder you want>,它会告诉你什么程序(如果有的话)正在使用它

由Sysinternals处理

在我的例子中,问题是visual Studio 2019上的视觉微。它正在抱怨\_vm\compile.vmps.xml文件。可能无法删除/修改。我通过删除项目根目录中的_vm文件夹并重新构建解决方案来修复此问题。

在我的情况下,我试图发布API到我的本地IIS,我通过简单地删除IIS目标文件夹中的导致文件并再次发布API来修复它,它似乎已经损坏或其他东西。

我在windows 10, Visual Studio 2022, Visual Basic项目上遇到过。进程资源管理器“查找句柄/ dll”;显示给我4行devenv.exe锁文件。

除了杀死devenv.exe,我还可以通过简单地删除包含锁定文件的文件夹来修复这个问题(在这种情况下,它是bin\Debug)。这很奇怪,因为我不允许删除锁定的文件,但我可以删除整个文件夹。

不知何故,一个简单的重启解决了我的问题。

在我的情况下,仍然有一个“隐形”;VS2022实例(devenv.exe)正在运行。它被列在任务管理器中,状态=挂起,但在任务栏或其他任何地方都看不到相应的窗口。在终止该进程之后,问题就解决了。

我尝试了以上的方法,但对我不起作用。我遵循的几个步骤:

  • 关闭所有VS实例,重新打开。
  • 关闭build.exe和explorer.exe进程。
  • 删除项目中的bin文件夹。
对我有效的是- 重启我的机器。