无法对打开了用户映射部分的文件执行请求的操作

时间:2011-01-11 13:56:56

标签: windows dll

每当我尝试将4个文件复制到我的bin文件夹中时,在停止主服务后,我收到一个文件错误(TexteDll)。错误是:

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

这可能是由于某些系统锁定造成的。或者也许另一个进程正在使用此DLL。当我用Google搜索时,我发现重新启动系统可能会解决此问题。

有人能为此提出原因或解决方案吗?我检查了TexteDll的属性(一般,版本,安全性等)。一切看起来都很正常。

32 个答案:

答案 0 :(得分:168)

在我的情况下,资源管理器锁定了在Debug文件夹中编译的DLL ...奇怪,不是吗?

我发现了一个名为Unlocker的工具。

不得不使用Unlocker删除,即使它说文件没有锁定,我也无法删除该文件夹,直到我没有删除该单个文件...

之后编译。

编辑:

我发现为什么在我的情况下这种情况正在发生。我在Visual Studio中的文本编辑器中打开了DLL ...

答案 1 :(得分:70)

  • 有时双击有关引用的警告 您忘记的两个或多个项目之间的程序集版本不匹配 关闭装配视图窗口,它保持在那里 标签...所以你最终得到VS锁定的程序集 本身,我花了很多时间才弄明白:)

    小心VS提供的电源;)

  • 另一个虚拟场景。有时只是删除整个obj 文件夹或只是文件警告,因为锁定的文件有助于此 糟糕的错误。

答案 2 :(得分:32)

关闭VS上的所有文档并尝试重新生成。如果不起作用重启VS.此问题与DLL文件的锁定有关。

答案 3 :(得分:10)

我遇到了同样的问题,在我看来,现有的输出文件似乎被其他应用程序锁定了。

您可以使用OpenedFilesView检查哪个应用程序正在锁定您的输出文件: http://www.nirsoft.net/utils/opened_files_view.html

答案 4 :(得分:10)

关闭visual studio,删除bin,调试版本文件夹,然后重新启动visual studio项目。 解决了我的问题

答案 5 :(得分:9)

其他人已经确定此错误是由于另一个应用程序锁定了该文件。只是想指出git diff锁定文件,直到你退出它。这就是造成这种情况的原因。

答案 6 :(得分:8)

我是开发人员,不喜欢像Unlocker那样注入Registery的应用程序。 我使用SysInternals Process Explorer进程锁定了我的dll Find > Find Handle or Dll [Ctrl-F]并杀死了该进程。

答案 7 :(得分:6)

在我的情况下,我不得不杀死一个锁定文件的挂起MSBuild.exe进程(即使在我关闭Visual Studio之后它也存在)。

答案 8 :(得分:5)

您是否正在运行任何防病毒软件。 AV软件(或其他一些软件)可能使用导致问题的文件映射API来读取文件。

答案 9 :(得分:3)

我有同样的问题。我的解决方法是:

  1. 打开“任务管理器”
  2. 结束任务“ Explorer.exe”
  3. 单击“文件”->创建新任务-键入“ explorer.exe”->确定
  4. 清理我的项目,它可以正常工作

答案 10 :(得分:3)

我遇到了同样的问题。重启对我不起作用。在任务管理器中运行了一个名为VBSCompiler的进程。我不得不结束修复此错误的过程。

答案 11 :(得分:2)

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

答案 12 :(得分:2)

删除obj文件夹并重建为我工作

答案 13 :(得分:2)

此处发布的解决方案均不适合我。它是devenv.exe(Visual Studio)锁定文件,但是如果我重新启动它,它会重新锁定它。

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

答案 14 :(得分:2)

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

答案 15 :(得分:1)

我的解决方案是重新启动计算机。

答案 16 :(得分:1)

pointed outAndrew Cuthbert上,git diff也会锁定文件,直到您退出文件为止。

Git 2.23(2019年第三季度)并非如此

请参见commit 3aef54eJohannes Schindelin (dscho)(2019年7月11日)。
(由Junio C Hamano -- gitster --commit d9beb46中合并,2019年7月25日)

  

import React, { Component } from 'react'; import './App.css'; import Form from "./Components/Form" import Overcast from "./Components/Overcast" import Forecast from "./Components/Forecast" class App extends Component { constructor(props) { super() this.state = { forecasts: [{}], selectedCity: 1 } this.handleCityChange = this.handleCityChange.bind(this) this.fetchForeacst = this.fetchForeacst.bind(this) } componentDidMount() { var today = new Date() var day = String(today.getDate()).padStart(2, '0') var month = String(today.getMonth() + 1).padStart(2, '0') var year = String(today.getFullYear()) today = year + '-' + month + '-' + day this.fetchForeacst(today) } componentDidUpdate() { var today = new Date() var day = String(today.getDate()).padStart(2, '0') var month = String(today.getMonth() + 1).padStart(2, '0') var year = String(today.getFullYear()) today = year + '-' + month + '-' + day this.fetchForeacst(today) } fetchForeacst(date) { const WEATHER_API = 'http://dev-weather-api.azurewebsites.net/api/city/' + this.state.selectedCity + '/weather?date=' + date + '' fetch(WEATHER_API) .then(response => response.json()) .then(data => this.setState({forecasts: data})) } handleCityChange(city) { this.setState({selectedCity: city}) } render() { return ( <div className="App"> <Form handleChange={this.handleCityChange}/> <Overcast forecast={this.state.forecasts[0]} /> <Forecast forecasts={this.state.forecasts} /> </div> ) } } export default App; :运行外部差异前的diff文件内容

     

例如,运行munmap()的外部差异时,   假设我们要编写有问题的文件。
  在Windows上,这意味着没有任何其他进程可以打开打开的句柄来   这些文件,甚至只是一个映射区域。

     

因此,请确保diff tool本身没有为相关文件保留任何打开的句柄。

     

实际上,我们将立即释放文件对,因为外部diff使用我们刚刚编写的文件,因此我们不再需要将文件内容保存在内存中。

     

此修复了git-for-windows#1315

答案 17 :(得分:1)

在我的案例中删除了项目根目录中的obj文件夹,重建项目解决了我的问题!!!

答案 18 :(得分:1)

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

就我而言,它是我们的企业备份软件Symantec DLO Agent。停止它并排除我的防病毒软件中的目录并关闭Visual Studio似乎可以正常工作。

答案 19 :(得分:0)

我今天也遇到了同样的错误。我通过重新构建项目解决了这个问题。

答案 20 :(得分:0)

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

答案 21 :(得分:0)

如果是Web应用程序,则删除Temporary ASP.NET Files文件夹中的文件可能是一种解决方案。

答案 22 :(得分:0)

我遇到了这个错误,原因是相关的“更多” vs文件在另一个控制台中运行。糟糕!

答案 23 :(得分:0)

我遇到了这个错误,事实证明问题是FxCop正在针对我的项目运行。我关闭了FxCop然后我可以再次编译。

答案 24 :(得分:0)

以上均未解决此问题。

有人在我的解决方案中设置了一个项目,以在构建配置中使用x64 CPU。将其更改为任何CPU都会导致生成使用新文件夹。我仍然不知道哪个进程对该文件具有锁定。

答案 25 :(得分:0)

我有同样的问题。我从临时文件夹中删除了dll,删除了只读访问权限并重新启动了计算机,并使它正常工作。

答案 26 :(得分:0)

就我而言,我只需要关闭所有实例,然后复制我的根应用程序文件夹并将其粘贴到其他位置,然后在VS中打开解决方案即可。...

答案 27 :(得分:0)

发生在我将项目目标 CPU 从“Any CPU”更改为“X64”然后又回到“Any CPU”之后。
删除Obj文件夹解决了(初学者不用担心删除obj文件夹,下次编译会重新创建)

答案 28 :(得分:0)

这是另一回事。似乎由于正在使用文件句柄而可能发生这种情况。我相信这就是 this answer 有效的原因。对我来说,我从命令行输入了 more project.csproj,却忘记了我没有打开它。所以把手被锁定以供阅读。
如果您偏爱命令行,Sysinternals 有一个简洁的命令行工具,称为 handle。您可以输入 handle <partial name of whatever file or folder you want>,它会告诉您正在使用它的程序(如果有)。

Handle by Sysinternals

答案 29 :(得分:0)

就我而言,问题出在 Visual Studio 2019 上的 Visual micro。它抱怨 \_vm\compile.vmps.xml 文件。可能无法删除/修改它。我通过删除项目根目录中的 _vm 文件夹并重新构建解决方案来解决此问题。

答案 30 :(得分:0)

就我而言,我试图将 API 发布到我的本地 IIS,我通过简单地删除 IIS 目标文件夹中的导致文件并再次发布 API 来修复它,它似乎已损坏或什么。

答案 31 :(得分:-1)

我的问题也通过在Process Explorer中进行筛选得以解决。但是,我必须杀死的过程是关闭所有VS和SQL应用程序后仍在运行的MySQL Notifier.exe。