Visual Studio "No se pudo copiar" ... durante la compilación


347

Sigo recibiendo este error durante la compilación de mi proyecto VS2012 C #

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

Ahora he descubierto que matar el proceso

Weingartner.WeinCad.vhost.exe

funciona (a veces) pero esto me está poniendo de los nervios. ¿Alguna forma de evitar que esto suceda?

Mis configuraciones de depurador son

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


Para mí, fue causado por .exe lanzado manualmente en el directorio Release. El problema era que VS no puede copiar sobre un ejecutable que todavía se está ejecutando. Intentaré solucionarlo limpiando adecuadamente los recursos para que el programa no se cuelgue después del botón de cerrar la ventana.
lahjaton_j

Hay un buen resumen de este problema con pasos típicos para resolver en esta pregunta
LightCC

Esto me estaba sucediendo porque Windows Defender decidió que ya no le gustaba el .exe del proyecto VS2019 en el que estoy trabajando. He estado trabajando en esto durante semanas sin problemas, pero hoy, supongo que a una nueva actualización no le gustó. Tuve que excluir mis carpetas de origen. Dejó de suceder.
IronRod

Respuestas:


401

He encontrado mensajes de error similares en Visual Studio 2013.

Principalmente, he descubierto que esta situación se produjo cuando se detuvo un proceso de depuración debido a una excepción.

Cuando clean + build no ha resuelto este problema para mí, he tenido éxito al hacer lo siguiente:

  • Cerrar Visual Studio
  • La eliminación de la biny objcarpetas, y
  • Reapertura de Visual Studio.

Este "error" existe desde Visual Studio 2003.

Finalmente, también descubrí que a menudo puedo superar este problema simplemente cambiando el nombre del archivo ejecutable y luego eliminándolo.


8
Lo mismo aquí, VS2013. Salir, eliminar artefactos de compilación, reiniciar -> todo bien.
cacau

49
Tengo el mismo problema, pero después de reiniciar VS, obtengo una compilación y los archivos se bloquean nuevamente ...
Sonic Soul

54
Esta no es una solución, en el mejor de los casos, una solución parcial. No quiero reiniciar VS cada 10 minutos. La limpieza de la solución me funciona, pero limpiarla cada 10 minutos tampoco es una solución.
Leyendas

77
Según mi experiencia, VS2013 hace esto al menos 10 veces al día para mí, sin importar en qué máquina estoy desarrollando. Es como si el error hubiera empeorado. Solo digo
AR

28
el error todavía existe en VS 2019.
Akash KC

107

En Visual Studio Premium 2013 (Actualización 3), resolví esto con una línea previa de compilación:

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

Esto borra con gracia cualquier archivo PDB antiguo (si puede), luego cambia el nombre de todo lo que quede con una .old.pdbextensión. Un buen efecto secundario es que si el PDB anterior todavía está bloqueado, simplemente agrega otra pieza .old al nombre del archivo, y todos se limpian la próxima vez que reinicie Visual Studio y realice una compilación.

Por ejemplo, la sesión de compilación / depuración 1 se deja MyProject.pdbbloqueada.
La próxima vez que construyas:
MyProject.pdb->MyProject.old.pdb

A continuación, se inicia la sesión acumulación / depuración 2, y tanto MyProject.pdb y MyProject.old.pdbtodavía están bloqueados:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Finalmente, reiniciar Visual Studio y hacer una nueva compilación eliminará ambos y continuará el proceso como de costumbre.


55
Lo mismo en VS2010, VS 2012
Boogier

77
Gracias, funcionó perfectamente para mí modificando su ejemplo para usar archivos exe en su lugar. Creo que esto también podría ser un error en el último VS 2015 CTP.
Johny Skovdal

Me alegro de que haya ayudado: todavía tengo mi comando de preconfiguración configurado, ¡y funciona lo suficientemente bien como para haber olvidado que estaba allí!
Geoff

3
Odio tener que hacer esto por director, pero funciona, ¡así que eso es todo! :) Gracias por compartir esta perla, Geoff!
kayleeFrye_onDeck

1
Última (2018-03-11) Visual Studio 2017 v15.6.1: sigue siendo un problema. Depuración, excepción, ensamblados en el directorio de destino bloqueado. La solución anterior con * .pdb cambiado a * .dll todavía se aplica.
Michiel de Wolde

71

Es porque ha cerrado su aplicación, pero todavía se está ejecutando en segundo plano.

Solución temporal:

  • Vaya al Administrador de tareas ( Ctrl+ Alt+ Esc).
  • Vaya a la pestaña Procesos y busque "YourProjectName.exe".
  • Marque "Mostrar procesos de todos los usuarios" si no puede encontrar su proceso.
  • Fin Procesalo.

Solución permanente: debe cerrar su aplicación a través de la codificación. Aquí está el código ...

System.Windows.Forms.Application.Exit();

Debe poner este código en el evento de cierre del formulario en todos los formularios. Ejemplo:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}

1
Esto fue exactamente eso. Visual Studio se había bloqueado e IIS Express seguía ejecutándose (en mi caso). Todo lo que tenía que hacer era abrir la barra de tareas y hacer clic derecho en el ícono IIS Express y salir. Gracias.
the-nick-wilson

Esto funcionó para mí; No pude eliminar las carpetas obj y bin porque otro proceso las estaba usando. Afortunadamente, Windows 10 realmente dijo cómo se llamaba; una vez que se cerró en el Administrador de tareas, los problemas desaparecieron
Novastorm

25

.vhost.exe es un proceso de depuración, por lo que parece que el proceso que se está depurando no se ha cerrado correctamente. Lo más probable es que tenga un error que lo mantiene vivo y no detiene el proceso de depuración correctamente: hay opciones para desconectarse del proceso cuando hace clic en 'detener depuración' en lugar de matar al depurador, por lo que tal vez tenga ese conjunto.

Pero ese es el problema: el sistema operativo bloquea el archivo que está intentando copiar (es decir, todavía lo está utilizando), por lo que impide la copia. Asegúrese de que el archivo sea gratuito y podrá copiarlo.


He agregado mis opciones de depurador a las preguntas. Estoy bastante seguro de que debería estar matando el proceso, pero tal vez no entiendo algunas opciones.
bradgonesurfing

En Visual Studio 2019, recibo un mensaje similar, aunque ahora menciona el proceso en algunos de los resultados (no en todos). Fue testhost.x86.exe que tuve que matar a través de Task Manager. Después de eso, pareció dejar de detectar uno de los procesos de prueba.
Andez


20

Debe deshabilitar su antivirus (especialmente si es un Avast) e intentarlo de nuevo. Me ayudó. El problema es que el depurador / creador crea el archivo .exe que Avast identifica como amenaza y, por lo tanto, lo elimina antes de que VS.


Buena atrapada. Siempre odio a Avast.
stackunderflow

Avast fue el problema para mí también. Desactivar el File System Shield fue la respuesta. Intenté agregar mi carpeta Visual Studio \ Projects a las Exclusiones pero eso no funcionó.
KeithB

1
Tengo el mismo problema con la protección de Symantec Endpoint. Alguien en el departamento de TI ha aumentado el nivel de seguridad bastante alto :-) Gracias Pitrs.
ssimm

Agregaré que puede crear una excepción para el directorio obj \ Debug para un uso conveniente, en lugar de deshabilitar el AV o una de sus herramientas de protección.
A. Kali

¡Gracias! Descubrí que era un MalwareBytes bloqueando mi archivo .exe.
NL3294

15

Pude solucionar este problema (VS 2010) mediante el suministro de la siguiente acción previa a la compilación;

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

1
@luckyluke, en las propiedades de tu proyecto, hay una sección donde puedes agregar un script previo a la compilación. Copie y pegue el script anterior en esa área designada y reconstruya el proyecto / ejecute su aplicación
Nair

13

Citar:

Una solución alternativa es poner esto en la propiedad de la línea de comandos del evento de precompilación del proyecto> (en la pestaña Eventos de compilación):

Fragmento de código

if exist "$(TargetPath).locked" del "$(TargetPath).locked"

if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"

8

Excepción

En algunos casos, en Visual Studio, cuando (Build || Rebuild) además de ejecutar IISExpress se enfrenta a esta excepción:

No se puede copiar el archivo "obj \ Debug \ YourProjectName.dll" a bin \ YourProjectName.dll ". El proceso no puede acceder al archivo 'bin \ YourProjectName.dll' porque está siendo utilizado por otro proceso

Solución

  1. Haga clic derecho en el proyecto web que necesita construir.
  2. Haga clic en propiedades.
  3. Seleccione la pestaña Crear eventos en el lado izquierdo.
  4. En la línea de comando de eventos previos a la compilación, pegue estas 2 líneas:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Eres bueno 2 GO!


6

Parece que al cambiar el nombre del ensamblado de un proyecto se soluciona el problema.

Entonces, en lugar de esto

ingrese la descripción de la imagen aquí

Lo cambio a esto

ingrese la descripción de la imagen aquí

Tenga en cuenta que solo lo cambié de Increment and Recalla Increment_Recall, simplemente eliminé los espacios. Ahora está funcionando bien para mí.


Genial, resolvió mi problema. ¡Gracias!
Kiran Joshi

6

Eliminar el proceso w3wp.exe (IIS) a menudo resolverá esto.
En general, puede conocer el proceso que tiene el bloqueo en el archivo navegando a la carpeta bin e intentando eliminarlo. El mensaje de error que aparecerá, en caso de que otro proceso lo esté usando, contendrá el nombre del proceso que necesita ser eliminado.


4

Me enfrenté al mismo problema en VS 2012 Versión 11.0.60610.01 Actualización 3 en Windows 8

No había ventanas de diseñador abiertas y el proyecto era una simple aplicación de consola.

La eliminación del proceso vshost que accede al archivo no funciona la mayor parte del tiempo ya que el proceso no accede al archivo.

La solución más simple que funciona y requiere la menor cantidad de tiempo es eliminar el proyecto de la solución, construir otro proyecto en la solución y luego volver a agregar el original.

Es irritante y una pérdida de tiempo, pero es la menos costosa de todas las otras opciones que conozco.

Espero que esto ayude...


Todo lo que tienes que hacer es reconstruir todo y todo está bien para otros 10 intentos. No es un gran inconveniente.
Scott Shaw-Smith

@ Scott Shaw-Smith no funciona para mí. Y según algunos de los otros comentarios que he visto, tampoco funciona para otros. En mi caso, la desinstalación de Avast lo arregló.
user316117

4

Creo que lo resolví eliminando la marca de verificación Break all processes when one process breaksen las opciones de depuración (primera captura de pantalla del op-> segunda opción).
Ha estado construyendo / funcionando bien por un tiempo desde que lo desmarqué.
Estoy usando los controles MySql NET Connector y DevExpress en mi proyecto. Puede ser que uno de ellos no esté eliminando conexiones, enlaces, etc. bien debido a que esta bandera está activada.

EDITADO: definitivamente funciona! No más "No se puede copiar el archivo" y no más errores de diseñador de formularios.


1
Ninguna de las otras soluciones funcionó para mí. Este es el único. Estoy usando Visual Studio 2017 13.2
xleon

1
Solo lo probé en VS2019, no funciona para mí
0xBADF00D

4

Agregue el evento previo a la compilación de su proyecto maestro taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


Realmente no me gusta resolver el problema de esta manera, ¡pero esto funcionó!
Petter T

He encontrado esta la solución de trabajo más simple para el problema.
dscharge

4

Mi contribución de 10 centavos.

Todavía tengo este problema ocasionalmente en VS 2015 Update 2.

Descubrí que cambiar el objetivo de compilación resuelve el problema.

Pruebe esto: si está en DEBUG, cambie a RELEASE y compile, luego vuelva a DEBUG. El problema se fue.

Stefano


¡Si! Eso es. ¡Esta es una solución simple a este molesto problema! Totalmente trabajado para mi. ¡Fácil y rápido! Muchas gracias.
Meister Schnitzel

1
¡Esto funciona para mi! Sugerencia: con la depuración desactivada >> Opciones >> Depuración >> General >> "Usar modo de compatibilidad administrada" ¡no es necesaria la solución!
leon22

4

Siga los pasos a continuación.

  1. Abrir el Administrador de tareas (Ctrl + Alt + Eliminar)
  2. En la pestaña Rendimiento, seleccione < ProjectNameOfYours.exe >.
  3. Haga clic en Finalizar proceso.
  4. Ahora construir solución.

Los pasos anteriores resolvieron el error permanentemente :)


4

Si ninguna de las respuestas funciona, intente esta simple comprobación. Busque cualquier MSbuild.exe que ejecute y mantenga su proyecto EXE. Elimine MSBuild.exe y debería estar listo para comenzar.


2

No puedo dar una solución para evitar que esto suceda, pero al menos puedes RENOMBRAR el archivo bloqueado (explorador de Windows o ventana de comando clásica) y luego compilar / compilar. No es necesario reiniciar o reiniciar VS201x. Con algo de experiencia, puede agregar una secuencia de comandos previa a la compilación para eliminar archivos antiguos o cambiar el nombre y luego quitarlo del camino en caso de que haya un bloqueo.


2

Ver esta otra respuesta . Básicamente, podría tener procesos MSBuild.exe ejecutándose en segundo plano que consumen archivos de recursos. Si tiene tareas previas o posteriores a la compilación que hacen que se inicie un MSBuild a través de la línea de comandos, intente agregar el indicador "/ nr: false" a este comando. Pero nuevamente, vea la respuesta anterior para obtener detalles más específicos.


Snap, tengo el mismo problema en VS2015 actualización 2 - MSBuild, el proceso exe necesita ser eliminado en TaskManager antes de que pueda volver a compilar.
Nick Wright

El enlace del artículo en la respuesta de Josh anterior sugiere usar una variable de entorno del sistema para deshabilitar la reutilización de nodos dentro de Visual Studio y el proceso MSBuild (MSBUILDDISABLENODEREUSE = 1): esto funcionó para mí.
Nick Wright

2

Finalmente, cómo arreglarlo. ¿Por qué no podemos continuar con la depuración después de la primera depuración porque el primer exe de depuración sigue ejecutándose? Entonces, después de la primera depuración, debe ir al Administrador de tareas -> Pestaña Proceso -> [su nombre de proyecto exe] y finalizar el proceso exe.

esto funciona para mi :)


Wow, gracias hombre, exactamente mi problema. Como me pide una contraseña de usuario mientras ejecuta exe, la primera vez no se activó. Cuando trato de eliminar esa aplicación en la lista de procesos y luego depurar nuevamente, funcionó a la perfección.
Chandraprakash

2

La respuesta de @ Geoff ( https://stackoverflow.com/a/25251766/3739540 ) es buena, pero arroja el código de error 1 en la recompilación.

Esto es lo que funcionó para mí (2> nul 1> nul al final + salida 0):

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0

2

Si está depurando plantillas T4 , esto sucede todo el tiempo. Mi solución (antes de que MS arregle esto) sería simplemente matar este proceso:

Administrador de tareas -> Usuario -> T4VSHostProcess.exe

Este proceso solo aparece cuando depura una plantilla T4, no cuando ejecuta una.


2

Aquí hay un script para definitivamente deshacerse de este problema:

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

La secuencia de comandos debe invocarse desde cada evento previo a la compilación del proyecto VS.

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

ingrese la descripción de la imagen aquí


2
  1. Abrir las propiedades del proyecto [menú> proyecto> propiedades]
  2. Elija la pestaña "depurar"
  3. Desmarca "Habilitar el proceso de alojamiento de Visual Studio"
  4. Iniciar depuración [F5]
  5. Recibirá una advertencia de seguridad, solo "ok". Permite que la aplicación se ejecute
  6. Detener la depuración.
  7. Marque la opción "Habilitar el proceso de alojamiento de Visual Studio", en la pestaña de depuración,
  8. Ahora, intente iniciar la depuración, no volverá a ver el error

[Trabaja para mi]


¿Por qué fue esto en -2? A mí también me ha funcionado. No tiene sentido, pero bueno, si funciona, funciona.
Wakka02

¿Es esta una solución permanente? es decir, ¿tienes que hacer estos 8 pasos cada vez?
Arthur Swails

vs17 no tiene la opción de proceso de hosting
John Demetriou

1

Esta pregunta fue el primer resultado al buscar el siguiente error:

No se pudo copiar el archivo "..." porque no se encontró.

al compilar en Visual Studio 2013 (Actualización 3).

Solución: desinstalar "Productivity Power Tools" en Visual Studio 2013.

https://connect.microsoft.com/VisualStudio/feedback/details/533411


Obteniendo este error muchas veces en la compilación para el proyecto heredado de TFS. ¡Pensé que esto era todo! Busqué esto en programas instalados y complementos. No se puede encontrar esta aplicación de herramientas eléctricas. ¿Dónde se escondería esto?
Taersious

1

En mi caso, fue el corredor Resharper Unit Tests (más las pruebas de NUnit, nunca tuve ese problema con MsTests). Después de matar el proceso, pude reconstruir el proceso, sin reiniciar el sistema operativo o VS2013


Sí, busqueJetBrains.Resharper.TaskRunner.*
Dunc

1

No me di cuenta de que todavía tenía mi depurador conectado e intentaba construir en la misma instancia de Visual Studio. Una vez que detuve el depurador pude construir.


1

Matar al vstest.executionengine.exe proceso (s) resuelve este problema el 90% del tiempo para mí. Si eso no funciona, también eliminar QTAgent32.exe y luego eliminar las carpetas / bin y / obj para el proyecto en cuestión.

Esta es la parte más irritante de mi día de trabajo. :)


1

Para mí, fue el antivirus Avast el que no permitió a Visual Studio escribir / leer / ejecutar archivos. Así que tuve que agregar la carpeta Visual studio 2010/2012 a la lista de exclusión de antivirus. Y justo después de ese baam ... funciona.


1

Asegúrese de cerrar todas las instancias wcfSvcHost e intente nuevamente. ¡Funcionó para mí!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.