Visual Studio "Impossibile copiare" ... durante la compilazione


347

Continuo a ricevere questo errore durante la compilazione del mio progetto 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.    

Ora ho capito che uccidere il processo

Weingartner.WeinCad.vhost.exe

funziona (a volte) ma questo mi dà sui nervi. Un modo per impedire che ciò accada?

Le mie impostazioni di debugger sono

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


Per me è stato causato dal lancio manuale di .exe nella directory Release. Il problema era che VS non poteva copiare su un eseguibile che è ancora in esecuzione. Proverò a risolverlo con un'adeguata pulizia delle risorse in modo che il programma non rimanga sospeso dopo il pulsante di chiusura della finestra.
lahjaton_j

C'è un buon riassunto di questo problema con i passaggi tipici da risolvere in questa domanda
LightCC

Questo stava accadendo per me perché Windows Defender ha deciso che non gli piaceva più il file .exe del progetto VS2019 su cui sto lavorando. Ci sto lavorando da settimane senza problemi, ma oggi suppongo che un nuovo aggiornamento non sia piaciuto. Ho dovuto escludere le mie cartelle di origine. Sto succedendo.
IronRod

Risposte:


401

Ho riscontrato messaggi di errore simili in Visual Studio 2013.

Principalmente, ho scoperto che questa situazione si è verificata quando un processo di debug è stato interrotto a causa di un'eccezione.

Quando clean + build non ha risolto questo problema per me, ho avuto successo nel modo seguente:

  • Chiusura di Visual Studio
  • Eliminazione del bine objcartelle, e
  • Riapertura di Visual Studio.

Questo "bug" esiste da Visual Studio 2003.

Infine, ho anche scoperto che spesso posso superare questo problema semplicemente rinominando il file eseguibile e quindi eliminandolo.


8
Lo stesso qui, VS2013. Smettere, cancellare artefatti di build, riavviare -> tutto bene.
cacau,

49
ho lo stesso problema, ma dopo aver riavviato VS ottengo una build e i file si bloccano di nuovo ..
Sonic Soul

54
Questa non è una soluzione, nella migliore delle ipotesi una soluzione parziale. Non voglio riavviare VS ogni 10 minuti. La pulizia della soluzione funziona per me, ma anche pulirla ogni 10 minuti non è una soluzione.
Leggende

7
In base alla mia esperienza, VS2013 lo fa almeno 10 volte al giorno, indipendentemente dalla macchina su cui sto sviluppando. È come se il bug peggiorasse. Dico solo
AR

28
bug esiste ancora in VS 2019.
Akash KC

107

In Visual Studio Premium 2013 (aggiornamento 3), ho risolto questo problema con un one-liner pre-build:

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

Questo elimina con grazia tutti i vecchi file PDB (se possibile), quindi rinomina tutto ciò che è rimasto con .old.pdbun'estensione. Un buon effetto collaterale è che se il vecchio PDB è ancora bloccato, aggiunge solo un altro pezzo vecchio al nome del file, e tutti vengono ripuliti al prossimo riavvio di Visual Studio ed eseguendo una compilazione.

Ad esempio, la sessione 1 di build / debug rimane MyProject.pdbbloccata.
La prossima volta che costruisci:
MyProject.pdb->MyProject.old.pdb

Quindi, viene avviata la sessione di build / debug 2 ed entrambi MyProject.pdb e MyProject.old.pdbsono ancora bloccati:
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

Infine, il riavvio di Visual Studio e l'esecuzione di una nuova build elimineranno entrambi e continueranno il processo come al solito.


5
Lo stesso in VS2010, VS 2012
Boogier,

7
Grazie, ha funzionato perfettamente per me modificando il tuo esempio usando invece i file exe. Penso che questo potrebbe essere un bug anche nell'ultimo CTP VS 2015.
Johny Skovdal,

Sono contento che mi abbia aiutato: ho ancora impostato il mio comando pre-build e funziona abbastanza bene da aver dimenticato che era lì!
Geoff,

3
Odio doverlo fare in linea di principio, ma funziona, quindi c'è quello! :) Grazie per aver condiviso questa perla, Geoff!
kayleeFrye_onDeck,

1
Ultimo (11-03-2018) Visual Studio 2017 v15.6.1: ancora un problema. Debug, eccezione, assembly nella directory di destinazione bloccati. La soluzione precedente con * .pdb modificata in * .dll si applica comunque.
Michiel de Wolde,

71

È perché hai chiuso l'applicazione, ma è ancora in esecuzione in background.

Soluzione temporanea:

  • Vai a Task Manager ( Ctrl+ Alt+ Esc).
  • Vai alla scheda Processi e trova "YourProjectName.exe".
  • Seleziona "Mostra processi da tutti gli utenti" se non riesci a trovare il processo.
  • Termina Elaboralo.

Soluzione permanente: è necessario chiudere l'applicazione tramite la codifica. Ecco il codice ...

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

Devi inserire questo codice nell'evento di chiusura del modulo in tutti i moduli. Esempio:

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

1
Questo era esattamente. Visual Studio si era arrestato in modo anomalo e IIS Express era ancora in esecuzione (nel mio caso). Tutto quello che dovevo fare era aprire la barra delle applicazioni e fare clic con il tasto destro sull'icona IIS Express ed uscire. Grazie.
the-nick-Wilson

Questo ha funzionato per me; Non sono riuscito a eliminare le cartelle obj e bin poiché un altro processo le stava utilizzando. Per fortuna Windows 10 in realtà ha detto come si chiamava; una volta chiuso in Task Manager i problemi scomparvero
Novastorm il

25

.vhost.exe è un processo di debugger, quindi sembra che il processo in fase di debug non sia stato chiuso correttamente. È probabile che tu abbia un bug che lo mantiene in vita e non sta arrestando correttamente il processo di debug - ci sono opzioni per staccare dal processo quando fai clic su "stop debugging" invece di uccidere effettivamente il debugger, quindi forse hai quel set.

Ma questo è il problema: il file su cui stai tentando di copiare è bloccato (cioè ancora utilizzato) dal sistema operativo, quindi impedisce la copia. Assicurati che il file sia gratuito e sarai in grado di copiarlo.


Ho aggiunto le mie opzioni di debugger alle domande. Sono abbastanza sicuro che dovrebbe uccidere il processo, ma forse non capisco alcune opzioni.
bradgonesurfing

In Visual Studio 2019, sto ricevendo un messaggio simile, anche se ora menziona il processo in alcuni degli output (non tutti). È stato testhost.x86.exe che ho dovuto uccidere via Task Manager. Dopodiché sembrava smettere di rilevare uno dei processi di test.
Andez,


20

Dovresti disabilitare il tuo antivirus (specialmente se si tratta di un Avast) e riprovare. Mi ha aiutato Il problema è che il debugger / builder crea il file .exe identificato come una minaccia da Avast e quindi cancellato prima che potesse essere eseguito da VS.


Buona pesca. Odio per sempre Avast.
Stackunderflow

Avast era il problema anche per me. La disabilitazione della protezione del file system era la risposta. Ho provato ad aggiungere la mia cartella Visual Studio \ Projects alle esclusioni ma non ha funzionato.
KeithB

1
Ho lo stesso problema con la protezione di Symantec Endpoint. Qualcuno nel reparto IT ha aumentato il livello di sicurezza piuttosto in alto :-) Grazie Pitrs.
ssimm,

Aggiungerò che è possibile creare un'eccezione per la directory obj \ Debug per un uso conveniente, invece di disabilitare l'AV o uno dei suoi strumenti di protezione.
A. Kali,

Grazie! Ho scoperto che era un MalwareBytes a bloccare il mio file .exe.
NL3294,

15

Sono stato in grado di risolvere questo problema (VS 2010) fornendo le seguenti azioni pre-build;

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

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

1
@luckyluke, Nelle proprietà del tuo progetto, c'è una sezione in cui puoi aggiungere uno script pre-build. Copia e incolla lo script sopra in quella zona designata e ricostruisci il progetto / esegui la tua applicazione
Nair

13

Citazione:

Una soluzione alternativa consiste nel metterlo nella proprietà della riga di comando dell'evento Pre-build del progetto> (nella scheda Eventi build):

Snippet di codice

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

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

8

Eccezione

In alcuni casi in Visual Studio quando (Build || Rebuild) oltre a eseguire IISExpress hai riscontrato questa eccezione:

Impossibile copiare il file "obj \ Debug \ YourProjectName.dll" in bin \ YourProjectName.dll ". Il processo non può accedere al file 'bin \ YourProjectName.dll' perché è utilizzato da un altro processo

Soluzione

  1. Fare clic con il tasto destro del mouse sul progetto Web che deve essere creato.
  2. Clicca sulle proprietà.
  3. Seleziona la scheda Crea eventi sul lato sinistro.
  4. Nella riga comandi Eventi pre-build, incollare queste 2 righe:
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

Sei bravo 2 GO!


6

Sembra che cambiando il nome dell'assembly di un progetto si risolva il problema.

Quindi invece di questo

inserisci qui la descrizione dell'immagine

Lo cambio in questo

inserisci qui la descrizione dell'immagine

Notate che l'ho appena cambiato da Increment and Recalla Increment_Recall, ho appena rimosso gli spazi. Ora sta funzionando bene per me.


Fantastico, ha risolto il mio problema. Grazie !!
Kiran Joshi,

6

Uccidere il processo w3wp.exe (IIS) spesso risolverà questo problema.
In genere, è possibile conoscere il processo che ha il blocco sul file accedendo alla cartella bin e cercando di eliminarlo. Il messaggio di errore che verrà visualizzato, nel caso in cui un altro processo lo stia utilizzando, conterrà il nome del processo che deve essere interrotto.


4

Ho riscontrato lo stesso problema su VS 2012 versione 11.0.60610.01 aggiornamento 3 su Windows 8

Non c'erano finestre di design aperte e il progetto era una semplice applicazione console.

La rimozione del processo vshost che accede al file non funziona per la maggior parte del tempo poiché il processo non accede al file.

La soluzione più semplice che funziona e richiede il minor tempo è rimuovere il progetto dalla soluzione, creare un altro progetto nella soluzione e quindi aggiungere l'originale.

È irritante e perde tempo ma è la meno costosa di tutte le altre opzioni che conosco.

Spero che sia di aiuto...


Tutto quello che devi fare è ricostruire tutto e tutto va bene per altri 10 tentativi. Non molto di un inconveniente.
Scott Shaw-Smith,

@Scott Shaw-Smith Non funziona per me. E sulla base di alcuni degli altri commenti che ho visto, non funziona neanche per altri. Nel mio caso la disinstallazione di Avast l'ha risolto.
user316117

4

Penso di averlo risolto rimuovendo il segno di spunta Break all processes when one process breaksin Opzioni di debug (prima schermata di op-> seconda opzione).
Costruisce / funziona bene da un po 'di tempo da quando l'ho deselezionato.
Sto usando i controlli MySql NET Connector e DevExpress nel mio progetto. Forse uno di loro non stava eliminando connessioni, attacchi, ecc. A causa di questa bandiera attivata.

EDITED: sicuramente funziona! Non più "Impossibile copiare il file" e non più errori di progettazione moduli.


1
Nessuna delle altre soluzioni ha funzionato per me. Questo è l'unico. Sto usando Visual Studio 2017 13.2
xleon

1
Appena testato su VS2019, non funziona per me
0xBADF00D

4

Aggiungi nell'evento pre-build del tuo progetto principale taskkill / f / fi "pid gt 0" / im "YourProcess.vshost.exe"


Non mi piace davvero risolvere il problema in questo modo, ma ha funzionato!
Petter T

Ho trovato questa la soluzione di lavoro più semplice per il problema.
scarica il

4

Il mio contributo di 10 centesimi.

Occasionalmente ho ancora questo problema su VS 2015 Update 2.

Ho scoperto che il cambio del target di compilazione risolve il problema.

Prova questo: se sei in DEBUG, passa a RELEASE e build, quindi torna a DEBUG. Il problema è sparito.

Stefano


Si! Questo è tutto. Questa è una soluzione semplice a questo fastidioso problema! Ha funzionato totalmente per me. Facile e veloce! Molte grazie.
Meister Schnitzel,

1
Per me funziona! Suggerimento: con il debug disattivato >> Opzioni >> Debug >> Generale >> "Usa la modalità di compatibilità gestita" la soluzione non è necessaria!
leon22,

4

Seguire i passaggi seguenti

  1. Apri Task Manager (Ctrl + Alt + Canc)
  2. Nella scheda Prestazioni selezionare selezionare < ProjectNameOfYours.exe >.
  3. Fai clic su Termina processo.
  4. Ora crea una soluzione.

I passaggi precedenti hanno risolto l'errore in modo permanente :)


3

Se nessuna delle risposte funziona, prova questo semplice controllo. Trova eventuali MSbuild.exe in esecuzione e in possesso del progetto EXE. Uccidi MSBuild.exe e dovresti essere a posto.


2

Non posso fornire una soluzione per impedire che ciò accada, ma puoi almeno RENAME il file bloccato (Windows Explorer o finestra di comando classica) e quindi compilare / compilare. Non è necessario riavviare o riavviare VS201x. Con un po 'di esperienza puoi aggiungere uno script pre-build per eliminare vecchi file o rinominare e poi fuori mano in caso di blocco.


2

Vedi questa altra risposta . Fondamentalmente, potresti avere processi MSBuild.exe in esecuzione nei file di risorse che consumano in background. Se hai attività pre o post build che provocano l'avvio di un MSBuild dalla riga di comando, prova ad aggiungere il flag "/ nr: false" a questo comando. Ma di nuovo, vedi la risposta precedente per dettagli più specifici.


Snap, ho lo stesso problema nell'aggiornamento VS2015 2 - MSBuild, il processo exe deve essere interrotto in TaskManager prima di poter ricostruire.
Nick Wright,

Il link all'articolo nella risposta di Josh sopra suggerisce di usare una variabile di ambiente di sistema per disabilitare il riutilizzo dei nodi in Visual Studio e il processo MSBuild (MSBUILDDISABLENODEREUSE = 1) - questo ha funzionato per me.
Nick Wright,

2

Finalmente ho risolto il problema. Perché non possiamo continuare il debug dopo il primo debug perché il primo exe di debug è ancora in esecuzione. Pertanto, dopo il primo debug, è necessario accedere a Task Manager -> Scheda Processo -> [nome progetto exe] per terminare il processo exe.

per me funziona :)


Wow, grazie amico, esattamente il mio problema. Dato che mi chiede la password dell'utente mentre eseguo exe, la prima volta non ha funzionato. Quando provo a eliminare l'app nell'elenco dei processi e quindi a eseguire nuovamente il debug, ha funzionato perfettamente.
Chandraprakash,

2

La risposta di @ Geoff ( https://stackoverflow.com/a/25251766/3739540 ) è buona, ma genera il codice di errore 1 durante la ricompilazione.

Ecco cosa ha funzionato per me (2> nul 1> nul alla fine + uscita 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

Se stai eseguendo il debug dei modelli T4 , questo accade sempre. La mia soluzione (prima che MS risolva questo problema) sarebbe stata quella di uccidere questo processo:

Task Manager -> Utente -> T4VSHostProcess.exe

Questo processo si presenta solo quando esegui il debug di un modello T4, non quando ne esegui uno.


2

Ecco uno script per eliminare definitivamente questo 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

Lo script deve essere invocato da ogni evento pre-build del progetto VS.

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

inserisci qui la descrizione dell'immagine


2
  1. Apri proprietà progetto [menu> progetto> proprietà]
  2. Scegli la scheda "debug"
  3. Deseleziona "Abilita il processo di hosting di Visual Studio"
  4. Inizia il debug [F5]
  5. Riceverai un avviso di sicurezza, semplicemente "ok". Consente l'esecuzione dell'applicazione
  6. Ferma il debug.
  7. Seleziona l'opzione "Abilita il processo di hosting di Visual Studio", nella scheda debug,
  8. Ora, prova ad avviare il debug, non vedrai più errori

[Lavora per me]


Perché è stato a -2? Ha funzionato anche per me. Non ha senso, ma ehi, se funziona, funziona.
Wakka02,

È una soluzione permanente? cioè devi fare questi 8 passaggi ogni volta?
Arthur Swails,

vs17 non ha l'opzione del processo di hosting
John Demetriou

1

Questa domanda è stata il primo risultato quando si è cercato il seguente errore:

Impossibile copiare il file "..." perché non è stato trovato.

durante la creazione in Visual Studio 2013 (aggiornamento 3).

Soluzione: disinstallazione degli "Strumenti di produttività per la produttività" in Visual Studio 2013.

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


Ottenere questo errore molte volte durante la compilazione del progetto ereditato da TFS. Pensavo fosse questo! Ho cercato questo nei programmi installati e nei componenti aggiuntivi. Impossibile trovare questa applicazione per elettroutensili. Dove si nasconderebbe questo?
Taersious,

1

Nel mio caso è stato il corridore dei test delle unità di resharper (più i test NUnit, non hanno mai avuto un tale problema con i test Ms). Dopo aver terminato il processo, è stato in grado di ricostruire il processo, senza riavviare il sistema operativo o VS2013


Sì, cercaJetBrains.Resharper.TaskRunner.*
Dunc,

1

Non mi ero reso conto di avere ancora il debugger collegato e stavo cercando di compilare nella stessa istanza di Visual Studio. Una volta che ho fermato il debugger sono stato in grado di costruire.


1

Uccidere il / i processo / i vstest.executionengine.exe risolve questo problema il 90% delle volte per me. Se ciò non funziona, uccidere anche QTAgent32.exe e quindi eliminare le cartelle / bin e / obj per il progetto in questione.

Questa è la parte più irritante della mia giornata di lavoro. :)


1

Per me è stato l'antivirus Avast a non consentire a Visual Studio di scrivere / leggere / eseguire file. Quindi ho dovuto aggiungere la cartella di Visual Studio 2010/2012 all'elenco di esclusione antivirus. E subito dopo quel baam ... funziona.


1

Assicurati di chiudere tutte le istanze wcfSvcHost e riprova. Ha funzionato per me!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.