La operación solicitada no se puede realizar en un archivo con una sección asignada por el usuario abierta

210

Cada vez que intento copiar 4 archivos en mi carpeta bin, después de detener el servicio principal, recibo un error con un archivo (TexteDll). El error es:

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

Puede deberse a algún bloqueo del sistema. O quizás otro proceso está usando esta DLL. Cuando busqué en Google, descubrí que reiniciar el sistema puede resolver esto.

¿Alguien puede sugerir una causa o solución para esto? Inspeccioné las propiedades de TexteDll (general, versión, seguridad, etc.). Todo parece normal.

Peter
fuente
8
En realidad, hay muchos más "duplicados" de la pregunta (por ejemplo: stackoverflow.com/questions/1818076/… ). El problema es que cada vez que la causa raíz es algo diferente.
MaciekTalaska
66
la próxima vez intente usar el "explorador de procesos" del sitio de microsoft. Tiene una característica llamada "buscar manejador". busque su archivo allí y le mostrará qué proceso tiene un identificador en ese archivo. Luego puede comenzar a investigar por qué ese programa tiene ese acceso. Por cierto, detener un servicio no necesariamente significa que el ejecutable que el servicio de host finalizará. Un ejecutable puede alojar múltiples servicios. En el peor de los casos, muchos servicios .net que usan grandes cantidades de memoria tienden a terminar después de liberar esa memoria, lo que ocurre a veces minutos después del evento de detención del servicio.
Erdogan Kurtur
3
Jejeje Visual Studio estaba bloqueando mi DLL. Cerré Visual Studio e intenté reconstruir la solución y funcionó.
Leniel Maccaferri
Esto obviamente es un conflicto de memoria. Una 'instancia' particular del objeto tiene asignada alguna memoria de bits asignada, luego descubre que la memoria (¿estáticamente?) Asignada a ella, ya ha sido asignada en otro lugar, probablemente con un nivel diferente de acceso al sistema.
ouflak

Respuestas:

177

En mi caso, fue el Explorer el que estaba bloqueando la DLL que se compiló en la carpeta Debug ... Extraño, ¿no?

Me enteré usando una herramienta llamada Unlocker.

Tuve que eliminar con Unlocker, incluso cuando decía que no había bloqueo sobre el archivo, y no podía eliminar la carpeta hasta que no eliminé ese archivo único ...

Después de eso se compiló.

EDITAR:

Descubrí por qué en mi caso esto estaba sucediendo. Tenía la DLL abierta en un editor de texto dentro de Visual Studio ...

Daniel Lobo
fuente
33
También abrí el dlo en una de mis muchas ventanas de estudio visual. Gracias por publicar esa actualización.
ptfaulkner
3
Lo mismo, de alguna manera, el archivo DLL dañado se abrió en una ventana de texto en el editor.
Harv
3
DLL abierto como una pestaña en VS también! ¡Gracias!
Connell
55
Divulgación completa: el enlace a "Unlocker" es un software espía total. Instala todo tipo de barras de herramientas y basura, incluso si desmarca todas las casillas diciendo que no las quiere.
Tim
77
Utilice Process Explorer instread de Unlocker. Una vez que se esté ejecutando PE, vaya a Buscar -> Buscar identificador o Dll y pegue el nombre del archivo bloqueado. Mostrará qué proceso lo bloqueó. Mátelo si está seguro de que está bien hacerlo y el problema debe resolverse.
Nikita G.
71
  • A veces, cuando hace doble clic en una advertencia sobre la versión de ensamblaje referenciada que no coincide entre dos o más proyectos, olvida cerrar la ventana de vista de ensamblaje y permanece allí entre otras pestañas ... por lo que termina con el ensamblaje bloqueado por VS y me tomó bastante tiempo darme cuenta :)

    Tenga cuidado con la potencia que proporciona VS;)

  • Otro escenario ficticio. A veces, simplemente eliminar toda la carpeta obj o solo el archivo advertido ya que el bloqueado ayuda con este error horrible.
Arman McHitarian
fuente
2
lo arreglé para mí ... Incluso hice un reinicio del sistema, pero VS volvió a abrir la ventana de vista de ensamblaje. Cerrar todas las pestañas hizo el trabajo. Saludos
Dave Lawrence
35

cierre todos los documentos en VS e intente reconstruir nuevamente. Si no funciona, reinicie VS. Este problema está relacionado con el bloqueo de archivos DLL.

cihata87
fuente
3
mismo, algo extraño con VS. reiniciar lo resolvió para mí.
PJUK
1
Esto funcionó para mí. Cosa extraña en mi circunstancia particular. Había ejecutado mi exe independiente, fuera del entorno VS. Lo dejé funcionando durante la noche (prueba de memoria, pasó), lo apagué por la mañana, un par de pequeños cambios de código, y de repente no pude terminar mi compilación debido a esto. Extraño cómo este recuerdo parecía entrar en conflicto así.
ouflak
Desagradable, gracias, un documento abierto estaba causando el error, ¡qué BS!
Brian Ogden
"Cerrar todos los documentos" y reconstruir realmente funcionó para mí. : o
Antoine Meltzheim
11

Cierre Visual Studio, elimine bin, elimine la carpeta de lanzamiento y vuelva a iniciar el proyecto Visual Studio. eso solucionó mi problema

usuario2038221
fuente
¡Esto funcionó para mí! ¡Gracias! Cambié el nombre de los directorios, por si acaso y funcionó.
DavidScherer
10

Tuve el mismo problema y en mi caso parecía que el archivo de salida existente estaba bloqueado por otra aplicación.

Puede verificar qué aplicación está bloqueando su archivo de salida con OpenedFilesView: http://www.nirsoft.net/utils/opened_files_view.html

bozydar.sz
fuente
10

Soy desarrollador y no me gustan las aplicaciones inyectadas en Registery como Unlocker. Utilicé SysInternals Process Explorer, proceso que bloqueó mi dll Find > Find Handle or Dll [Ctrl-F]y eliminó el proceso.

guneysus
fuente
1
Descubrió que estaba bloqueado por un proceso VS que no murió cuando VS se cerró.
Yoztastic
2
Incluso después de que DevEnv se cerró y el Administrador de tareas no lo mostró, Process Explorer mostró varias instancias de DevEnv Suspendido. Mata a estos y funcionó.
DeclanMcD
1
Esta es la respuesta más correcta, ya que muestra cómo encontrar qué proceso está bloqueando el archivo, en lugar de simplemente decir "en mi caso fue debido a X". ¡Todos los desarrolladores en Windows se beneficiarían de agregar procexp y procmon a su cinturón de herramientas!
Matt Wanchap
9

Otros ya han establecido que este error se debe a que otra aplicación tiene un bloqueo en el archivo. Solo quería señalar que también git diffbloquea los archivos hasta que salga de él. Eso es lo que causó esto en mi caso.

andrew.cuthbert
fuente
El mismo problema para mí. Olvidé que no había dejado el diff. Desafortunadamente, no vi esta respuesta hasta que cerré un montón de otras ventanas y vi que todavía estaba en una diferencia. Luego me aseguré de no publicar una respuesta
engañada,
1
@codeMagic Git 2.23 (Q3 2019) evitará esa trampa. Vea mi respuesta a continuación
VonC
9

Tuve el mismo problema. Cómo lo resolví fue:

  1. Abra el "Administrador de tareas"
  2. Finalizar tarea "Explorer.exe"
  3. Haga clic en "Archivo" -> Crear nueva tarea - Escriba "explorer.exe" -> Aceptar
  4. Limpia mi proyecto y funciona
usuario10991945
fuente
También tuve que reiniciar el proceso Explorer desde el Administrador de tareas. En mi caso, había visto el archivo "problemático" en el área "Vista previa" del Explorador. Esto también parece bloquear archivos de vez en cuando sin liberarlos nunca. Cerrar todas las ventanas del Explorador no ayudó. Tuve que reiniciar el proceso.
gehho
¡Finalmente! Gracias.
TheJack
6

¿Está ejecutando algún software antivirus? Es posible que el software AV (o alguna otra pieza de software) estuviera leyendo el archivo utilizando las API de asignación de archivos que causaron el problema.

Eoin Campbell
fuente
6

En mi caso, tuve que matar un MSBuild.exeproceso de bloqueo que bloqueaba el archivo (estaba allí incluso después de cerrar Visual Studio).

t3chb0t
fuente
1
Lo lograste. ¡Muchas gracias!
Larry
4

Eliminar la carpeta obj y reconstruir funcionó para mí

colmde
fuente
3

Yo tuve el mismo problema. Reiniciar no funcionó para mí. Había un proceso llamado VBSCompiler que se estaba ejecutando en el administrador de tareas. Tuve que finalizar el proceso para corregir este error.

Nirjhar Vermani
fuente
También puede limpiar su solución e intentarlo de nuevo
Nirjhar Vermani
3

Ninguna de las soluciones publicadas aquí funcionó para mí. Era devenv.exe (Visual Studio) bloqueando el archivo, pero si lo reiniciaba, lo volvería a bloquear.

Curiosamente, Windows no me permitió eliminar los archivos (a la Papelera de reciclaje), pero Shift + Delete (eliminación permanente) funcionó.

makhdumi
fuente
2

Cierre Visual Studio y ejecútelo como administrador. Se solucionó mi problema.

Sanjay Ghinaiya
fuente
Recibí este error al crear una aplicación brillante en rstudio, por lo que muchas de estas respuestas no me fueron útiles. Pero vi esto e intenté reiniciar rstudio como administrador, y funcionó. Luego, cuando volví a correr como usuario, funcionó nuevamente.
Paul
2

La solución para mí fue cerrar todas las instancias de VS y eliminar cualquier proceso colgante devenv.exe.

usuario2338408
fuente
2

La solución para mí fue reiniciar la computadora.

ML13
fuente
2

Fue señalado en 2016 por Andrew Cuthbert que git archivos bloqueos de diferencial, así hasta que salga de ella.

Ese no será el caso con Git 2.23 (Q3 2019)

Ver commit 3aef54e (11 de julio de 2019) por Johannes Schindelin ( dscho) .
(Fusionada por Junio ​​C Hamano - gitster- en commit d9beb46 , 25 jul 2019)

diff: munmap()contenido del archivo antes de ejecutar diff externo

Cuando se ejecuta una diferencia externa de, digamos, a diff tool, es seguro asumir que queremos escribir los archivos en cuestión.
En Windows, eso significa que no puede haber ningún otro proceso que tenga un identificador abierto para dichos archivos, o incluso solo una región asignada.

Así que asegurémonos de que git diff no contenga ningún controlador abierto para los archivos en cuestión.

De hecho, solo liberaremos el par de archivos de inmediato, ya que el diff externo usa los archivos que acabamos de escribir, por lo que ya no necesitamos mantener el contenido del archivo en la memoria.

Esto corrige git-for-windows # 1315

VonC
fuente
1

Estaba viendo estos errores al crear aplicaciones Dot Net con Ant.

En mi caso fue nuestro software de respaldo corporativo, el Symantec DLO Agent. Parece que funciona detenerlo y excluir el directorio de mi software antivirus y cerrar Visual Studio.

Robert Bratton
fuente
1

En mi caso, eliminé la carpeta obj en la raíz del proyecto y el proyecto de reconstrucción resolvió mi problema.

Ali Rasouli
fuente
0

Encontré este error y resultó que el problema era que FxCop se estaba ejecutando en mi proyecto. Cerré FxCop y luego pude compilar nuevamente.

Tim
fuente
0

Si se trata de una aplicación web, la eliminación de archivos en la carpeta Archivos temporales de ASP.NET podría ser una solución.

suphero
fuente
0

Si está utilizando perfiladores como AQ Time, estos también pueden estar bloqueando el archivo. La solución en este caso sería reiniciar el generador de perfiles o simplemente descargar / cargar el ensamblaje en cuestión desde el generador de perfiles. Para AQ Time, noté que está lanzando el archivo después de un tiempo, pero no puedo decir por qué es ese tiempo de espera. Parece ser al azar

recuerdo de un sueño
fuente
0

También recibí el mismo error hoy. He resuelto este problema reconstruyendo el proyecto.

Siva Sankar Gorantla
fuente
0

Tuve este error causado por un 'más' vs archivo en cuestión dejado ejecutándose en otra consola. Ups

ade jones
fuente
0

Ninguno de los anteriores resolvió este problema.

Alguien tenía un proyecto en mi conjunto de soluciones para usar CPU x64 en la configuración de compilación. Al cambiarlo a Cualquier CPU, la compilación utilizó una nueva carpeta. Todavía no sé qué proceso tenía (tiene) un bloqueo en ese archivo.

CM
fuente
0

Tuve el mismo problema . Eliminé dll de la carpeta temporal, eliminé el acceso de solo lectura y reinicié la máquina y lo puse a funcionar.

Sarad Vishwakama
fuente
0

En mi caso, solo cierro todas las instancias y copio mi carpeta de aplicación raíz y la pego en una ubicación diferente, luego abro la solución en VS, funciona ...

Appu
fuente
-1

Mi problema también se resolvió revisando el Explorador de procesos. Sin embargo, el proceso que tuve que eliminar fue el MySQL Notifier.exe que todavía se estaba ejecutando después de cerrar todas las aplicaciones VS y SQL.

JN88
fuente