2009-04-24 13 views
13

Ho letto molte delle altre domande pubblicate sullo stesso problema, ma continuo a non capire la causa e come impedire che ciò accada.assembly corrotto ASP.NET "Impossibile caricare file o assembly App_Web_ *"

Nel mio caso, ciò accade sul server di produzione. Ottengo lo stesso errore che è stato descritto in altre domande e lo risolvo ri-copiando gli assembly nella directory bin. Non sono nemmeno ricompilati i file, sono gli stessi che c'erano prima - copiati di nuovo, e poi inizia a funzionare senza problemi.

La parte strana è che sto utilizzando Progetti di distribuzione Web per rinominare tutti i miei file di assembly in dll basati su cartelle. Quindi folder.dll e folder.subfolder.dll anziché App_Web_jt8nxllz.dll. Tuttavia, l'errore continua a denominare il file App_Web_jt8nxllz.dll originale.

Eliminare il contenuto della cartella C:\WINDOWS\Microsoft.NET\Framework[64]\v...\Temporary ASP.NET Files funziona ed è tutto a posto, ma qualcuno sa come evitare che si verifichi questo errore? Inoltre, arrestare IIS o riavviarlo non è realmente possibile quando si verifica sul server di produzione. Forse pulire automaticamente la cartella Temp su un programma di pianificazione?

Qual è il vero problema qui? C'è qualcosa in particolare che fa sì che ciò accada? Il sito canticcherà senza problemi, quindi all'improvviso un'intera cartella smetterà di funzionare e produrrà questo errore.

Could not load file or assembly 'App_Web_jt8nxllz, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 
Exception type 'System.IO.FileNotFoundException' was caught. 
Source: App_Web_whv5zsvd 
Target Site: Void __BuildControlTree(ASP.artists_controls_artistheader_ascx) 
Stack Trace: 
    at ASP.artists_controls_artistheader_ascx.__BuildControlTree(artists_controls_artistheader_ascx __ctrl) 
    at ASP.artists_controls_artistheader_ascx.FrameworkInitialize() 
    at System.Web.UI.UserControl.InitializeAsUserControlInternal() 
    at System.Web.UI.UserControl.InitializeAsUserControl(Page page) 
    at ASP._artists_artist_master.__BuildControlctlArtistHeader() 
    at ASP._artists_artist_master.__BuildControlctlContent(Control __ctrl) 
    at System.Web.UI.CompiledTemplateBuilder.InstantiateIn(Control container) 
    at ASP.master_mysite_master.__BuildControlMainContent() 
    at ASP.master_mysite_master.__BuildControlform1() 
    at ASP.master_mysite_master.__BuildControlBody() 
    at ASP.master_mysite_master.__BuildControlTree(master_mysite_master __ctrl) 
    at ASP.master_mysite_master.FrameworkInitialize() 
    at System.Web.UI.UserControl.InitializeAsUserControlInternal() 
    at System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) 
    at System.Web.UI.MasterPage.get_Master() 
    at System.Web.UI.MasterPage.ApplyMasterRecursive(MasterPage master, IList appliedMasterFilePaths) 
    at System.Web.UI.Page.ApplyMasterPage() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

risposta

8

Non collegare solo il mio sito ma ho incontrato questo problema e ho scritto a blog post on the topic. Dai un'occhiata, contiene link a maggiori informazioni su questo argomento. Ma per riassumere qui i dettagli:

Problema:

Il sito sta gettando un errore nel tentativo di caricare un controllo web personalizzato. Come vedi nell'ultima versione, abbiamo aggiunto un nuovo controllo personalizzato a un altro controllo web personalizzato che viene visualizzato secondo necessità. Poiché il controllo most/gen esterno e il nuovo controllo figlio sono controlli separati nell'origine, quando .Net Framework va a compilare uno di questi due controlli e non ricompila l'altro nello stesso momento si avrà uno scaduto file che tenta di fare riferimento alla versione precedente dell'assembly. Il fatto che il framework .Net accoda una stringa casuale al nome dell'assembly in fase di compilazione, il nome del file appena compilato e la versione precedente del file causano una mancata corrispondenza del nome del file e quindi il controllo esterno/genitore sta cercando un file che non esiste più.

possibile aggirare (s) o correzioni temporanee:

1) Impostando la proprietà lotto del tag di compilazione su false nel web.file di configurazione

<compilation debug="false" batch="false" /> 

2) Si può anche diminuire come spesso accade impostando dalla numRecompileBeforeAppRestart proprietà:

<compilation debug="false" numRecompilesBeforeAppRestart="50" /> 

Vedere la KB Article 934839 per maggiori dettagli

correzioni per il problema dopo che si ha già avuto luogo:

1) Elimina file ASP.Net temp (questo richiede giù il sito)

2) Forzare il controllo parent/outter per ricompilare, modificare e salvare il file di codice. Questa è un'opzione migliore per una correzione di # 1 perché questo non fa cadere il sito web.

Il mio suggerimento:

1) In primo luogo penso che dovremmo mettere in atto la correzione temporanea # 1 dall'alto, questo potrebbe prevenire tutti i problemi in futuro e potrebbe essere l'unica risposta che ci serve.

2) In secondo luogo, scaricavo e installavo l'aggiornamento rapido 934839 da Microsoft nell'ambiente QA per verificare che non causasse alcun problema. Dopo un po 'di tempo per testare l'aggiornamento rapido in QA, installerei l'aggiornamento rapido per avere una correzione permanente per questo problema. Al momento potremmo rimuovere il lavoro temporaneo intorno al primo.

Nota: Dopo aver impostato la correzione numero 1, non ho più avuto il problema Ho avuto questa correzione sul posto per oltre 12 mesi e tutto è buono!

0

Cancellare i file temporanei o modificare web.config non ha funzionato per me. Per me, ciò che è stato risolto è stato il riavvio del mio computer.

Problemi correlati