2016-04-14 10 views
6

Ho un progetto MVC 5 chiamato MyApp che compila in MyApp.dll sto usando Visual Studio 2015 e la compilazione di mira NET Framework 4.5.1IIS espresso processo di lavoro non rilasciare assemblaggio

Dopo aver sviluppato un po 'ho non può compilare più perché il IIS Express Worker Process non rilascia il file \obj\Debug\MyApp.dll

cosa strana che se faccio una ricompilazione completa poi in qualche modo l'assemblaggio viene liberato e posso quindi avviare il debug di nuovo, almeno la maggior parte del tempo.

(E in alcuni casi una ricompilazione non aiuta più e devo iniziare a uccidere il processo)

idea del perché il processo IIS espresso operaio fa bloccare la mia montaggio?

La rappresentazione di errore in VS 2015: enter image description here

+0

puoi fornire maggiori dettagli sull'errore che stai ricevendo? – tmg

+0

@tmg screenshot allegato con l'errore. Se sto cercando di eliminare il file manualmente, il sistema operativo mi informa che il file è utilizzato dal WP di IIS Express. – gsharp

+0

La copia shadow è disabilitata? – usr

risposta

0

ho aggiornato da Visual Studio 2015 Update 1 per aggiornare 2 pochi giorni un andare. Questo in qualche modo ha risolto il problema per me. Qualcun altro può confermarlo?

-2

Si informa che, se il processo di lavoro (w3wp.exe) è il primo tentativo di accedere all'applicazione MVC poi la dipendenza dal dll sarà comunicato solo quando il client che accede tramite il browser è chiuso. Puoi provare a debuggin l'applicazione web dopo averla distribuita in IIS, in questo modo una copia verrebbe pubblicata nella directory inetpub/vitual e la dipendenza da directoy alla DLL in VS può essere bloccata.

2

Quello che ho affrontato prima durante il debug dell'applicazione utilizzando un browser diverso da Internet Explorer, Visual Studio scollegherà solo il processo, ma non chiuderà il servizio. a volte quando l'handle viene rilasciato l'applicazione non sta rilasciando le risorse utilizzate dal servizio (ad esempio un file di registro a cui si accede o un lungo processo in esecuzione collegato alla sessione appena lasciata.) Come @Michael Mentions potrebbe esserci una perdita di memoria . Ho dovuto forzare la chiusura di IIS, per rilasciare le risorse. altra cosa che è successo è che 2 sviluppatori nella stessa macchina (RDP) stanno elaborando lo stesso server, e la porta/le librerie non sono rilasciate come l'una o l'altra la sta usando. Dato che non abbiamo molti più dettagli sul tuo ambiente di sviluppo, tutti pongono a scenari "forse".

1

La causa principale è che IIS ha un blocco sul file e VS non è in grado di eliminare il file quando viene compilato. Mark Russinovich (Microsoft Fellow e SysInternals Co-Founder) ha un grande blog su come trovare questa traccia: The case of the mysterious locked file - fondamentalmente utilizza Process Monitor (FileMon) e Process Explorer per investigare.

fino a identificare il motivo per cui IIS non posso sbloccare la DLL, qui alcune soluzioni:

  1. cmd iniziare con privilegi elevati ed emettere un netstat -an -p tcp per verificare se un'altra applicazione sta contendendo per la porta stai usando e causando un problema di conflitto vincolante. È possibile controllare i log di httperr per ulteriori informazioni.

  2. Vai alle proprietà del progetto> scheda "Debug"> deselezionare "Abilita il processo di hosting di Visual Studio ".

  3. Avviare cmd con privilegi elevati ed emettere un net stop iisadmin /y seguito da un iisreset.

  4. Esegui una soluzione pulita e completa ricompilazione, questo funziona a intermittenza perché non esiste un modo sicuro al 100% di "apprendere se un file è in uso" perché millisecondi dopo aver verificato il file potrebbe non essere più in uso, o vice versa.

  5. Spesso devo tornare all'ultima risorsa e rinominare il file bloccato MyApp.dll in MyApp1.dll.

Un'ultima cosa che voglio risolvere è il commento di @ user1438893 su "IIS Express buggy". Forse questo è un bug, forse di sua progettazione, anche se più probabilmente una perdita di memoria/uncinetto/risorsa non gestita-non gestita in uscita causata dal codice dell'utente finale. Utilizzando Process Monitor e Process Explorer sarà in grado di aiutarti a scoprirlo.

6

Potrebbero verificarsi problemi con il blocco dei file se l'indicizzazione è attivata nella directory. Potrebbe essere il problema come si è verificato era nelle impostazioni della directory virtuale in IIS. Se la directory virtuale ha ancora il flag index this location trasformato in on, risulta che IIS sta ponendo un blocco temporaneo su questi file, anche se l'applicazione Web non è stata avviata (cioè era solo una compilazione, non una esecuzione di debug). Dopo aver trasformato l'impostazione index this locationoff, il problema del blocco dei file scompare.

Vedere this per ulteriori informazioni.

+0

Ciao @bko dove cambio questa impostazione in iis express? Penso che questo sia influenzato solo se si utilizza IIS (non Express) insieme a VS? – gsharp

2

Penso che la vera risposta qui sia che Visual Studio è un po 'buggato da quella parte. Ciò accade anche a volte con applicazioni desktop (winform o WPF), in cui la compilazione fallisce a causa dell'output bloccato del progetto (l'exe o la DLL che si sta creando).

Ho problemi simili, a volte, con Visual Studio professional 2013 e penso che accada anche su versioni precedenti. In questo caso chiudo Visual Studio e lo riapre e questo risolve tutti i problemi.

Alcuni di riferimento:

Visual Studio 2010 build file lock issues

Visual Studio locks output file on build

Locking files when building in Visual Studio 2010

Problemi correlati