Запрошенная операция не может быть выполнена для файла с открытым разделом, отображенным пользователем

210

Всякий раз, когда я пытался скопировать 4 файла в папку bin, после остановки основного сервиса я получаю сообщение об ошибке с одним файлом (TexteDll). Ошибка:

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

Это может быть связано с блокировкой системы. Или, возможно, другой процесс использует эту DLL. Когда я гуглил, я обнаружил, что перезагрузка системы может решить эту проблему.

Кто-нибудь может предложить причину или решение для этого? Я проверил свойства TexteDll (общие, версия, безопасность и т. Д.). Все выглядит нормально.

Питер
источник
1
дубликат stackoverflow.com/questions/1302698/…
Сэм
8
на самом деле есть еще много «дубликатов» вопроса (например: stackoverflow.com/questions/1818076/… ) - проблема в том, что каждый раз первопричина является чем-то другим.
MaciekTalaska
6
в следующий раз попробуйте использовать «Process Explorer» с сайта Microsoft. Он имеет функцию под названием «найти дескриптор». ищите ваш файл там, и он покажет вам, какой процесс имеет дескриптор этого файла. Затем вы можете начать исследовать, почему эта программа имеет такой доступ. Кстати, остановка службы не обязательно означает, что исполняемый файл, на котором размещается служба, завершится. Исполняемый файл может содержать несколько служб. В худшем случае многие сервисы .net, которые используют огромные объемы памяти, имеют тенденцию завершаться после освобождения этой памяти, что происходит иногда через несколько минут после события остановки сервиса.
Эрдоган Куртур
3
Хехехе Visual Studio блокировал мою DLL. Закрыл Visual Studio и попытался пересобрать Решение, и оно заработало.
Лениэль Маккаферри
Это, очевидно, конфликт памяти. Конкретный «экземпляр» объекта имеет некоторое выделенное битовое сопоставление памяти, а затем обнаруживает, что выделенная ему память (статически?) Уже отображена в другом месте, вероятно, с другим уровнем доступа к системе.
ouflak

Ответы:

177

В моем случае это был Проводник, который блокировал DLL, скомпилированную в папке Debug ... Странно, не правда ли?

Я узнал, используя инструмент под названием Unlocker.

Пришлось удалять с помощью Unlocker, даже когда он говорил, что файл не заблокирован, и я не мог удалить папку, пока не удалил этот единственный файл ...

После этого он скомпилирован.

РЕДАКТИРОВАТЬ:

Я выяснил, почему в моем случае это происходило. Я открыл DLL в текстовом редакторе в Visual Studio ...

Даниэль Лобо
источник
33
У меня было открытое дло в одном из моих многочисленных визуальных окон студии. Спасибо за публикацию этого обновления.
ptfaulkner
3
То же самое, почему-то опасная DLL была открыта в текстовом окне в редакторе.
Harv
3
DLL открыта как вкладка в VS тоже! Спасибо!
Коннелл
5
Полное раскрытие: ссылка на «Unlocker» является полным шпионским ПО. Он устанавливает все виды панелей инструментов и дерьма, даже если вы снимите все флажки, говоря, что вы не хотите их.
Тим
7
Используйте Process Explorer, например, Unlocker. После запуска PE перейдите в Find -> Find Handle или Dll и вставьте имя заблокированного файла. Он покажет, какой процесс заблокировал его. Убейте его, если вы уверены, что это нормально, и проблема должна быть решена.
Никита Г.
71
  • Иногда, когда вы дважды щелкаете по предупреждению о несоответствии указанной версии сборки между двумя или более проектами, вы забываете закрыть окно представления сборки, и оно остается там среди других вкладок ... так что в итоге сборка блокируется самой VS и мне потребовалось довольно много времени, чтобы понять это :)

    Будьте осторожны с силой, которую обеспечивает VS;)

  • Еще один фиктивный сценарий. Иногда простое удаление всей папки obj или только файла, предупреждаемого как заблокированная, помогает с этой дрянной ошибкой.
Арман Макхитариан
источник
2
Разобрал это для меня ... Я даже перезагрузил систему, но VS снова открыл окно представления сборки. Закрытие всех вкладок сделало свою работу. Приветствия
Дэйв Лоуренс
35

закройте все документы на VS и попробуйте пересобрать заново. Если это не работает, перезапустите VS. Эта проблема связана с блокировкой DLL-файлов.

cihata87
источник
3
то же самое, странность с VS. рестарт разобрал это для меня.
PJUK
1
Это сработало для меня. Странная вещь в моих конкретных обстоятельствах. Я выполнил свой exe автономно, вне среды VS. Оставил его работать на ночь (тест памяти - он прошел), выключил его утром, пару небольших изменений кода, и внезапно не смог завершить сборку из-за этого. Странно, как казалось, что эта память конфликтует.
ouflak
Противно, спасибо, открытый документ вызывал ошибку, какая хз!
Брайан Огден
«Закрыть все документы» и перестроить на самом деле работал для меня! : o
Антуан Мельцхайм
11

Закройте Visual Studio, удалите bin, отладьте папку выпуска и снова запустите Visual Studio Project. это решило мою проблему

user2038221
источник
Это сработало для меня! Спасибо! Я переименовал каталоги, на всякий случай и все заработало.
DavidScherer
10

У меня была такая же проблема, и в моем случае оказалось, что существующий выходной файл был заблокирован другим приложением.

Вы можете проверить, какое приложение блокирует ваш выходной файл, с помощью OpenedFilesView: http://www.nirsoft.net/utils/opened_files_view.html.

bozydar.sz
источник
10

Я разработчик и не люблю приложения, добавленные в Registery, как Unlocker. Я использовал SysInternals Process Explorer, который заблокировал мою DLL Find > Find Handle or Dll [Ctrl-F]и убил процесс.

guneysus
источник
1
Обнаружил, что он был заблокирован процессом VS, который не умирает, когда VS был закрыт.
Yoztastic
2
Даже после того, как DevEnv был закрыт и диспетчер задач не показывал его, Process Explorer показывал несколько экземпляров DevEnv Suspended. Убей их, и это сработало.
DeclanMcD
1
Это самый правильный ответ, поскольку он показывает, как найти процесс, который блокирует файл, а не просто сказать «в моем случае это произошло из-за X». Каждый разработчик на Windows получит выгоду от добавления procxp и procmon в свой инструментарий!
Мэтт Ванчап
9

Другие уже установили, что эта ошибка связана с тем, что другое приложение заблокировало файл. Просто хотел отметить, что git diffблокирует файлы, пока вы не выйдете из него. Вот что вызвало это в моем случае.

andrew.cuthbert
источник
Та же проблема для меня. Забыл, что я не вышел из различий. К сожалению, я не видел этот ответ, пока не закрыл кучу других окон и увидел, что он все еще в разногласии. Затем
следил за
1
@codeMagic Git 2.23 (Q3 2019) позволит избежать этой ловушки. Смотрите мой ответ ниже
VonC
9

Я была такая же проблема. Как я решил это было:

  1. Откройте «Диспетчер задач»
  2. Завершить задачу "Explorer.exe"
  3. Нажмите «Файл» -> Создать новое задание - введите «explorer.exe» -> ОК
  4. Очистите мой проект, и он работает
user10991945
источник
Мне также пришлось перезапустить процесс Explorer из диспетчера задач. В моем случае я просматривал «проблемный» файл в области «Предварительный просмотр» Проводника. Это также, кажется, время от времени блокирует файлы, даже не выпуская их. Закрытие всех окон проводника не помогло. Пришлось перезапустить процесс.
gehho
В заключение! Спасибо.
TheJack
6

Вы используете какое-либо антивирусное программное обеспечение? Возможно, что программное обеспечение AV (или какое-то другое программное обеспечение) считывало файл, используя API-интерфейсы сопоставления файлов, что вызвало проблему.

Эойн Кэмпбелл
источник
6

В моем случае мне пришлось убить зависший MSBuild.exeпроцесс, который блокировал файл (он был там даже после того, как я закрыл Visual Studio).

t3chb0t
источник
1
Ты сделал это. Большое спасибо!
Ларри
4

Удаление папки obj и восстановление работало для меня

colmde
источник
3

У меня такая же проблема. Перезагрузка не работает для меня. В диспетчере задач был запущен процесс под названием VBSCompiler. Мне пришлось завершить процесс, чтобы исправить эту ошибку.

Нирджар Вермани
источник
Вы также можете очистить свое решение и попробовать еще раз
Nirjhar Vermani
3

Ни одно из опубликованных здесь решений не помогло мне. Это был файл devenv.exe (Visual Studio), блокирующий файл, но если бы я перезапустил его, он бы снова его заблокировал.

Как ни странно, Windows не позволяла мне удалять файлы (в корзину), но Shift + Delete (постоянное удаление) работало.

Махдуми
источник
2

Закройте Visual Studio и запустите его от имени администратора. Это исправило мою проблему.

Санджай Гинайя
источник
Я получал эту ошибку при создании блестящего приложения в rstudio, поэтому многие из этих ответов мне не помогли. Но я увидел это и попытался перезапустить rstudio как администратор, и это сработало. Затем, когда я вернулся к работе в качестве пользователя, он снова заработал.
Пол
2

Решением для меня было закрыть все экземпляры VS и уничтожить любые зависшие процессы devenv.exe.

user2338408
источник
2

Решением для меня было перезагрузить компьютер.

ML13
источник
2

Это было отмечено в 2016 году Эндрю Катбертом что git diff также блокирует файлы, пока вы не выйдете из него.

Это не будет иметь место с Git 2.23 (Q3 2019)

См. Коммит 3aef54e (11 июля 2019 г.) Йоханнеса Шинделина ( dscho) .
(Слиты Junio C Hamano - gitster- в фиксации d9beb46 , 25 июля 2019)

diff: munmap()содержимое файла перед запуском внешнего diff

При запуске внешнего diff, скажем, из a diff tool, можно с уверенностью предположить, что мы хотим записать соответствующие файлы.
В Windows это означает, что не может быть никакого другого процесса, держащего открытый дескриптор для указанных файлов, или даже просто отображенную область.

Итак, давайте удостоверимся, что git diffсам по себе не держит никаких открытых дескрипторов для рассматриваемых файлов.

Фактически, мы сразу же выпустим пару файлов, поскольку внешний diff использует файлы, которые мы только что написали, поэтому нам больше не нужно хранить содержимое файла в памяти.

Это исправляет git-for-windows # 1315

VonC
источник
1

Я видел эти ошибки при создании приложений Dot Net с помощью Ant.

В моем случае это было наше корпоративное программное обеспечение для резервного копирования, Symantec DLO Agent. Остановка и исключение каталога в моем антивирусном программном обеспечении и закрытие Visual Studio, похоже, работает.

Роберт Браттон
источник
1

в моем случае удалил папку obj в корне проекта и пересобрать проект решил мою проблему !!!

Али Расули
источник
0

Я столкнулся с этой ошибкой, и оказалось, что проблема заключалась в том, что FxCop работал против моего проекта. Я закрыл FxCop, а затем я мог снова скомпилировать.

Тим
источник
0

Если это веб-приложение, удаление файлов в папке Temporary ASP.NET Files может быть решением.

suphero
источник
0

Если вы используете профилировщики, такие как AQ Time, они также могут блокировать файл. Решением в этом случае было бы перезапустить профилировщик или просто выгрузить / загрузить соответствующую сборку из профилировщика. Для AQ Time я заметил, что через некоторое время он выпускает файл, но я не могу сказать, что это за тайм-аут. Кажется случайным

память о сне
источник
0

Я также получил ту же ошибку сегодня. Я решил эту проблему, перестроив проект.

Шива Санкар Горантла
источник
0

У меня была эта ошибка, вызванная тем, что файл «more» vs рассматриваемый оставался запущенным в другой консоли. К сожалению.

Ад Джонс
источник
0

Ничто из вышеперечисленного не решило эту проблему.

У кого-то был один проект в моем решении, настроенный на использование процессора x64 в конфигурации сборки. Изменение его на Any CPU привело к тому, что сборка использовала новую папку. Я до сих пор не знаю, какой процесс заблокировал этот файл.

СМ
источник
0

У меня была такая же проблема. Я удалил dll из временной папки, удалил доступ только для чтения и перезапустил машину и заставил ее работать.

Сарад Вишвакама
источник
0

В моем случае я просто закрываю все экземпляры и копирую корневую папку приложения и вставляю ее в другое место, затем открываю решение в VS, оно работает ....

Appu
источник
-1

Моя проблема также была решена путем просеивания через Process Explorer. Однако процесс, который мне пришлось убить, был MySQL Notifier.exe, который все еще работал после закрытия всех приложений VS и SQL.

JN88
источник