c# - winform - visual studio form application tutorial




La compilazione di Visual Studio non riesce: impossibile copiare il file exe da obj \ debug a bin \ debug (20)

Aggiornamento: un progetto di esempio che riproduce questo errore può essere trovato qui in Microsoft Connect . Ho anche testato e verificato che la soluzione fornita nella risposta accettata qui sotto funziona su quel progetto di esempio. Se questa soluzione non funziona per te, probabilmente stai avendo un problema diverso (che appartiene a una domanda separata).

Questa è una domanda posta prima, sia qui su Stack Overflow che in altri luoghi, ma nessuno dei suggerimenti che ho trovato fino ad ora mi ha aiutato, quindi devo solo provare a fare una nuova domanda.

Scenario: ho una semplice applicazione Windows Form (C #, .NET 4.0, Visual Studio 2010). Ha un paio di moduli base ereditati dalla maggior parte delle altre forme, utilizza Entity Framework (e le classi POCO) per l'accesso al database. Niente di speciale, niente multi-threading o altro.

Problema: tutto andava bene per un po '. Quindi, tutto sommato, Visual Studio non è riuscito a creare quando stavo per lanciare l'applicazione. Ho ricevuto l'avviso "Impossibile eliminare il file '... bin \ Debug \ [ProjectName] .exe" L'accesso al percorso' ... bin \ Debug \ [ProjectName] .exe 'è negato. " e l'errore "Impossibile copiare il file 'obj \ x86 \ Debug \ [ProjectName] .exe' in 'bin \ Debug \ [ProjectName] .exe. Il processo non può accedere al file' bin \ Debug \ [ProjectName] .exe 'perché è utilizzato da un altro processo. " (Ricevo sia l'avviso che l'errore durante l'esecuzione di Ricostruisci, ma solo l'errore durante l'esecuzione di Build: non pensare che sia rilevante?)

Capisco perfettamente quello che dice il messaggio di avviso e di errore: Visual Studio sta ovviamente cercando di sovrascrivere il file exe mentre lo stesso tempo ha un blocco su di esso per qualche motivo. Tuttavia, questo non mi aiuta a trovare una soluzione al problema ... L'unica cosa che ho trovato funzionante è chiudere Visual Studio e avviarlo di nuovo. Costruire e lanciare poi funziona, fino a quando non apporto un cambiamento in alcune delle forme, poi ho di nuovo lo stesso problema e devo ricominciare ... Abbastanza frustrante!

Come ho detto sopra, questo sembra essere un problema noto, quindi ci sono molte soluzioni suggerite. Elenco solo ciò che ho già provato qui, quindi le persone sanno cosa saltare:

  • Creare una nuova soluzione pulita e copiare semplicemente i file dalla vecchia soluzione.
  • Aggiunta di quanto segue all'evento di pre-build del progetto:

    if exist "$(TargetPath).locked" del "$(TargetPath).locked"
       if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
    
  • Aggiunta di quanto segue alle proprietà del progetto (file .csproj):

    <GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
    

Tuttavia, nessuno di loro ha funzionato per me, quindi puoi probabilmente capire perché sto iniziando a sentirmi un po 'frustrato. Non so dove altro guardare, quindi spero che qualcuno abbia qualcosa da darmi! Si tratta di un bug in VS, e in tal caso c'è una patch? O ho fatto qualcosa di sbagliato, ho un riferimento circolare o simile, e se sì, come potrei scoprirlo?

Qualsiasi suggerimento è molto apprezzato :)

Aggiornamento: come menzionato nel commento qui sotto, ho anche controllato utilizzando Process Explorer che in realtà è Visual Studio che sta bloccando il file.


Avevo anche un problema molto simile a questo e ho trovato il motivo nel mio caso era che avevo reso disponibile la cartella bin \ debug come cartella condivisa sotto VMware e VMware, Explorer sotto il guest VM, o forse persino un antivirus programma sotto l'ospite (anche se non penso di averne uno installato) stava tenendo un handle per il file (s).


Dal momento che non ho più avuto alcun riscontro su questo tema, ho pensato di condividere ciò che alla fine è stata la mia soluzione:

Come suggerito da Barry in un commento al post originale, rinominare manualmente '... bin \ Debug [ProjectName] .exe' in qualcos'altro (es. '[ProjectName] 1.exe' ) è un work-around (I ' m tuttavia non mi è permesso di cancellare il file da solo, e devo dire che trovo un po 'strano il fatto che si possa credere che lo stesso blocco che impedisce la cancellazione possa anche impedire la ridenominazione ...). Non è una buona soluzione, ma è abbastanza veloce (almeno dopo averlo fatto un paio di volte, diventa quasi una routine), e almeno molto più veloce del riavvio di Visual Studio, che è quello che ho fatto all'inizio.

Nel caso qualcuno si chieda, potrei anche aggiungere che vedo solo questo problema in modo semi-casuale. Accade solitamente dopo aver apportato alcune modifiche alla modalità di progettazione di un modulo (ma non sempre). Di solito non accade se cambio solo codice di business logic o codice non visivo (ma a volte lo fa ...). Davvero frustrante, ma almeno ho un hack che funziona per me - speriamo solo che il mio prossimo progetto non affronti questo problema ...

@Barry: se desideri ottenere credito per il tuo commento, non esitare a postarlo come risposta e mi assicurerò di accettarlo :)


Fai prima le cose semplici.

Verifica che parte della tua soluzione non sia bloccata da un processo in esecuzione.

Ad esempio, ho eseguito "InstallUtil" sul mio servizio Windows (che normalmente collaudo da una console).

Ciò ha bloccato alcune delle mie DLL nella cartella bin del progetto del servizio Windows. Quando ho fatto una ricostruzione ho ottenuto l'eccezione in questo numero.

Ho fermato il servizio Windows, ricostruito e ci sono riuscito.

Controlla il Task Manager di Windows per la tua applicazione, prima di eseguire una qualsiasi delle fasi avanzate in questo numero.

Quindi quando senti dei passi, pensa che i cavalli non siano zebre! (da un amico studente di medicina)


Ho affrontato lo stesso errore.

Ho risolto il problema eliminando tutto il contenuto delle cartelle bin di tutti i progetti / librerie dipendenti.

Questo errore si verifica principalmente a causa di modifiche alla versione.


Ho lo stesso problema (MSB3021) con il progetto WPF in VS2008 (su Windows 7 x32). Il problema appare se provo a rieseguire l'applicazione troppo velocemente dopo l'esecuzione precedente. Dopo pochi minuti exe-file sbloccato da solo e posso rieseguire l'applicazione di nuovo. Ma una pausa così lunga mi fa arrabbiare. L'unica cosa che mi ha veramente aiutato è stata eseguire VS come amministratore.


Ho provato diverse soluzioni che hai fornito, ma occasionalmente continuo a ricevere questo errore. Sono sicuro che il mio processo non è in esecuzione, e quando provo a eliminare il file eseguibile con Internet Explorer, viene rimosso dall'elenco dei file, ma poi premo F5 e voilà, il file è tornato. Non è stato cancellato affatto.

Ma se cancello il file attraverso TotalCommander, il file exe viene effettivamente cancellato e posso creare il progetto con successo.

Sto usando Windows 7 x64 e il comandante totale 7.56a a 32 bit.


Ho trovato con VS2013 ottengo questo errore regolarmente. Qualcosa che sembra funzionare abbastanza bene è di eseguire una soluzione di ricostruzione prima di provare a eseguire l'applicazione. Ho scoperto che l'esecuzione di un CLEAN a volte funziona, ma la soluzione di ricostruzione sembra funzionare in modo più coerente.


Ho trovato una soluzione semplice, basta disabilitare i servizi di indicizzazione di Windows per la cartella del progetto e le sottocartelle


Per i servizi Windows che utilizzano WCF, ho terminato il processo host WFC e ha funzionato. Lo odio quando questo accade, e succede occasionalmente a volte.


Per me questo era causato dall'avere un prompt dei comandi aperto nella cartella di destinazione ( C:\users\username\source\repos\project\project\bin\debug\app.publish ).

Non sono sicuro del motivo per cui DEBUGGING richiede l'accesso alla cartella di pubblicazione, ma la chiusura della finestra di comando ha risolto il problema per me.


Quando ho trovato questo problema, ha a che fare con il fatto che il progetto che sto cercando di costruire è impostato come progetto di avvio nella soluzione che rende l'exe nella cartella obj bloccato (appare anche nel tuo task manager,) fare clic con il tasto destro del mouse su un altro progetto nella soluzione e scegliere Imposta progetto di avvio. Questo rilascerà il blocco, rimuoverlo dal task manager e dovrebbe consentire di creare.


Questo è piuttosto comunemente causato da Avast.

In genere, posso eseguire i miei progetti in Release, ma quando si esegue il debug, fallirebbe abbastanza regolarmente.

Aggiungo solo un'esclusione per la cartella dei miei progetti e il problema sembra andare via. Presumo che questo potrebbe anche essere causato da altri software antivirus.


Riavvia IIS- potrebbe essere un processo collegato al debugger


Rinominare il file .exe e .pub ha funzionato per me, ma davvero noioso. Affronto anche il problema che non ho potuto modificare durante una sessione di debug. Alla fine sono passato alla pagina Impostazioni di sicurezza avanzate, come da:

https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28%22VS.ERR.DEBUG_IN_ZONE_NO_HOSTPROC%3a11310%22%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION % 3dV4.0% 22% 29 & rd = true

I un-select quindi riseleziona la casella di controllo "Enable ClickOnce security settings". E 'stato senza problemi per qualche giorno ora ....


Sembrerà stupido, ma ho provato tutte queste soluzioni, eseguendo VS2010 su Windows 7. Nessuno di loro ha funzionato, tranne la ridenominazione e la costruzione, il che è stato MOLTO noioso per non dire altro. Alla fine, ho rintracciato il colpevole, e trovo difficile crederlo. Ma stavo usando il seguente codice in AssemblyInfo.cs ...

[assembly: AssemblyVersion("2.0.*")]

Questo è abbastanza comune, ma per qualche motivo, cambiando la versione in 2.0.0.0 le cose hanno funzionato di nuovo. Non so se si tratta di una cosa specifica di Windows 7 (l'ho usata solo da 3-4 settimane), o se è casuale, o cosa, ma è stata risolta per me. Immagino che VS stia tenendo d'occhio ogni file generato, quindi saprebbe come incrementare le cose? Non sono davvero sicuro e non l'ho mai visto prima. Ma se anche qualcun altro là fuori tira fuori i capelli, provaci.


So che questa è una domanda molto vecchia, ma recentemente ho riscontrato l'errore "impossibile copiare da obj a bin" in VS 2012. Ogni volta che ho provato a ricostruire un determinato progetto, ho ricevuto il messaggio. L'unica soluzione era fare una pulizia prima di ogni ricostruzione.

Dopo molte ricerche, è emerso che in uno dei miei file era presente un'istruzione di avvertenza pragma incompleta che non impediva il corretto completamento della compilazione, ma in qualche modo confondeva VS nel mantenere i file bloccati.

Nel mio caso, ho avuto il seguente nella parte superiore del file:

#pragma warning(

Questo è tutto. Immagino che stavo tentando di fare qualcosa un po 'indietro e mi sono distratto e non ho mai terminato il processo, ma gli avvertimenti VS su quella particolare linea sono andati persi nello shuffle. Alla fine ho notato l'avviso, ho rimosso la linea e ricostruito i lavori ogni volta da allora.


Utilizzando Visual Studio non potrei mai trovare un semplice progetto per riprodurre l'errore.

La mia soluzione era disabilitare il processo di hosting di Visual Studio.

Per gli interessati ho allegato una traccia di handle per la maniglia incriminata:

0:044> !htrace 242C
--------------------------------------
Handle = 0x000000000000242c - OPEN
Thread ID = 0x0000000000001cd0, Process ID = 0x0000000000001a5c

0x000000007722040a: ntdll!ZwCreateFile+0x000000000000000a
0x0000000074b4bfe3: wow64!whNtCreateFile+0x000000000000010f
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x00000000772184c8: ntdll!LdrpInitializeProcess+0x00000000000017e2
0x0000000077217623: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bea0
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773d0066: ntdll_773b0000!NtCreateFile+0x0000000000000012
0x000000007541b616: KERNELBASE!CreateFileW+0x000000000000035e
0x0000000075b42345: KERNEL32!CreateFileWImplementation+0x0000000000000069
0x000000006a071b47: mscorwks_ntdef!StgIO::Open+0x000000000000028c
--------------------------------------
Handle = 0x000000000000242c - CLOSE
Thread ID = 0x0000000000000cd4, Process ID = 0x0000000000001a5c

0x000000007721ffaa: ntdll!ZwClose+0x000000000000000a
0x0000000074b3f2cd: wow64!whNtClose+0x0000000000000011
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007724d177: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bfe4
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773cf992: ntdll_773b0000!ZwClose+0x0000000000000012
0x0000000075b42642: KERNEL32!BaseRegCloseKeyInternal+0x0000000000000041
0x0000000075b425bc: KERNEL32!RegCloseKey+0x000000000000007d
*** WARNING: Unable to verify checksum for mscorlib.ni.dll
0x0000000068f13ca3: mscorlib_ni+0x0000000000233ca3
0x0000000069bc21db: mscorwks_ntdef!CallDescrWorker+0x0000000000000033
0x0000000069be4a2a: mscorwks_ntdef!CallDescrWorkerWithHandler+0x000000000000008e
--------------------------------------
Handle = 0x000000000000242c - OPEN
Thread ID = 0x00000000000006cc, Process ID = 0x0000000000001a5c

0x0000000077220e0a: ntdll!NtOpenKeyEx+0x000000000000000a
0x0000000074b5d1c9: wow64!Wow64NtOpenKey+0x0000000000000091
0x0000000074b5313b: wow64!whNtOpenKeyEx+0x0000000000000073
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007724d177: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bfe4
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773d0fca: ntdll_773b0000!NtOpenKeyEx+0x0000000000000012
0x0000000075b42721: KERNEL32!LocalBaseRegOpenKey+0x000000000000010c
0x0000000075b428c9: KERNEL32!RegOpenKeyExInternalW+0x0000000000000130
0x0000000075b427b5: KERNEL32!RegOpenKeyExW+0x0000000000000021
--------------------------------------
Handle = 0x000000000000242c - CLOSE
Thread ID = 0x0000000000000cd4, Process ID = 0x0000000000001a5c

0x000000007721ffaa: ntdll!ZwClose+0x000000000000000a
0x0000000074b3f2cd: wow64!whNtClose+0x0000000000000011
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007724d177: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bfe4
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773cf992: ntdll_773b0000!ZwClose+0x0000000000000012
0x0000000075b42642: KERNEL32!BaseRegCloseKeyInternal+0x0000000000000041
0x0000000075b425bc: KERNEL32!RegCloseKey+0x000000000000007d
0x0000000068f13ca3: mscorlib_ni+0x0000000000233ca3
0x0000000069bc21db: mscorwks_ntdef!CallDescrWorker+0x0000000000000033
0x0000000069be4a2a: mscorwks_ntdef!CallDescrWorkerWithHandler+0x000000000000008e
--------------------------------------
Handle = 0x000000000000242c - OPEN
Thread ID = 0x0000000000001cd0, Process ID = 0x0000000000001a5c

0x0000000077220e0a: ntdll!NtOpenKeyEx+0x000000000000000a
0x0000000074b5d1c9: wow64!Wow64NtOpenKey+0x0000000000000091
0x0000000074b5313b: wow64!whNtOpenKeyEx+0x0000000000000073
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x00000000772184c8: ntdll!LdrpInitializeProcess+0x00000000000017e2
0x0000000077217623: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bea0
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773d0fca: ntdll_773b0000!NtOpenKeyEx+0x0000000000000012
0x0000000075b42721: KERNEL32!LocalBaseRegOpenKey+0x000000000000010c
0x0000000075b428c9: KERNEL32!RegOpenKeyExInternalW+0x0000000000000130
--------------------------------------
Handle = 0x000000000000242c - CLOSE
Thread ID = 0x0000000000000cd4, Process ID = 0x0000000000001a5c

0x000000007721ffaa: ntdll!ZwClose+0x000000000000000a
0x0000000074b3f2cd: wow64!whNtClose+0x0000000000000011
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x000000007724d177: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bfe4
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773cf992: ntdll_773b0000!ZwClose+0x0000000000000012
0x0000000075b42642: KERNEL32!BaseRegCloseKeyInternal+0x0000000000000041
0x0000000075b425bc: KERNEL32!RegCloseKey+0x000000000000007d
0x0000000068f13ca3: mscorlib_ni+0x0000000000233ca3
0x0000000069bc21db: mscorwks_ntdef!CallDescrWorker+0x0000000000000033
0x0000000069be4a2a: mscorwks_ntdef!CallDescrWorkerWithHandler+0x000000000000008e
--------------------------------------
Handle = 0x000000000000242c - OPEN
Thread ID = 0x0000000000001cd0, Process ID = 0x0000000000001a5c

0x0000000077220e0a: ntdll!NtOpenKeyEx+0x000000000000000a
0x0000000074b5d1c9: wow64!Wow64NtOpenKey+0x0000000000000091
0x0000000074b5313b: wow64!whNtOpenKeyEx+0x0000000000000073
0x0000000074b3cf87: wow64!Wow64SystemServiceEx+0x00000000000000d7
0x0000000074ac276d: wow64cpu!TurboDispatchJumpAddressEnd+0x0000000000000024
0x0000000074b3d07e: wow64!RunCpuSimulation+0x000000000000000a
0x0000000074b3c549: wow64!Wow64LdrpInitialize+0x0000000000000429
0x00000000772184c8: ntdll!LdrpInitializeProcess+0x00000000000017e2
0x0000000077217623: ntdll! ?? ::FNODOBFM::`string'+0x000000000002bea0
0x000000007720308e: ntdll!LdrInitializeThunk+0x000000000000000e
0x00000000773d0fca: ntdll_773b0000!NtOpenKeyEx+0x0000000000000012
0x0000000075b42721: KERNEL32!LocalBaseRegOpenKey+0x000000000000010c
0x0000000075b428c9: KERNEL32!RegOpenKeyExInternalW+0x0000000000000130

--------------------------------------
Parsed 0x358E stack traces.
Dumped 0x7 stack traces.
0:044> !handle 242c ff
Handle 242c
  Type          File
  Attributes    0
  GrantedAccess 0x120089:
         ReadControl,Synch
         Read/List,ReadEA,ReadAttr
  HandleCount   2
  PointerCount  3
  No Object Specific Information available

Disattiva antivirus e prova. Stavo anche affrontando questo problema ... ma nel mio caso l'antivirus stava bloccando la mia applicazione quando ho disattivato l'antivirus risolto.


La mia soluzione non ha nulla a che fare con versioni, processi bloccati, riavvio o eliminazione di file.

Il problema era in realtà dovuto alla mancata realizzazione, e non dare l'errore corretto. Il vero problema era un difetto di progettazione:

// Either this should be declared outside the function, or..
SomeObject a = new SomeObject(); 

Task.Factory.StartNew(() =>
{
   while (true)
   {
      a.waitForSomething();
   }
});

// ...this should not be called
a.doSomething(); 

Dopo aver modificato l'ambito di "a" all'esterno della funzione, o non utilizzando "a" dopo Task.Factory.StartNew(); , Sono stato in grado di ricostruire.

Questo è accaduto quando si utilizza VS2012 Update 4 su Windows7x64 sp1.

Messaggio di errore:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (3390,5): errore MSB3030: Impossibile copiare il file "obj \ x86 \ Debug \ xxx.exe" perché non è stato trovato .


SE IL TUO PROBLEMA NON È ANCORA RISOLTO:

L'errore di Visual Studio è:

"Il processo non può accedere al file 'bin \ Debug ** app.exe **' perché è utilizzato da un altro processo."

Quindi vai al task manager di windows (Ctrl + Shift + Esc), trova il nome dell'applicazione e costringilo a chiudere Endprocces.







visual-studio