2009-04-24 19 views
13

He leído muchas de las otras preguntas publicadas sobre el mismo problema, pero sigo sin entender la causa y cómo evitar que ocurra.Conjunto dañado de ASP.NET "No se pudo cargar el archivo o ensamblado App_Web_ *"

En mi caso, esto sucede en el servidor de producción. Obtengo el mismo error que se ha descrito en otras preguntas, y lo resuelvo volviendo a copiar los ensamblajes en el directorio bin. Ni siquiera son archivos recompilados, son los mismos que estaban allí antes, copiados nuevamente y luego comienzan a funcionar sin problemas.

La parte más extraña es que estoy usando proyectos de implementación web para cambiar el nombre de todos mis archivos de ensamblaje en dll basados ​​en carpetas. Así que folder.dll y folder.subfolder.dll en lugar de App_Web_jt8nxllz.dll. Sin embargo, el error aún nombra el archivo App_Web_jt8nxllz.dll original.

Eliminación de los contenidos de la carpeta C:\WINDOWS\Microsoft.NET\Framework[64]\v...\Temporary ASP.NET Files obras y es todo muy bien, pero ¿alguien sabe cómo evitar que este error ocurra? Además, apagar IIS o reiniciarlo realmente no es tan factible cuando sucede en el servidor de producción. Tal vez limpiar la carpeta Temp en un programador de forma automática?

¿Cuál es el verdadero problema aquí? ¿Hay algo en particular que hace que esto suceda? El sitio no tendrá ningún problema, y ​​de repente, una carpeta completa deja de funcionar y produce este error.

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) 

Respuesta

8

No solo para vincular mi sitio, pero me he encontrado con este problema y escribí a blog post on the topic. Compruébalo, tiene enlaces a más información sobre este tema. Pero para resumir, aquí están los detalles:

Problema:

La página web está lanzando un error al intentar cargar un control web personalizado. Como se ve en la última versión, agregamos un nuevo control personalizado a otro control web personalizado que se muestra según sea necesario. Debido a que el control externo/principal y el nuevo control secundario son controles independientes en el origen, cuando .Net Framework va a compilar uno de estos dos controles y no recompila el otro al mismo tiempo, tendrá una fecha vencida. archivo que intenta hacer referencia a la versión anterior del ensamblaje. El hecho de que .NET Framework anexe una cadena aleatoria al nombre del ensamblado en tiempo de compilación, el nombre del archivo recién compilado y la versión anterior del archivo causa una discrepancia en el nombre del archivo y, por lo tanto, el control externo/principal está buscando un archivo que ya no existe

trabajo posible alrededor (s) o Arreglos temporales:

1) Al establecer la propiedad del lote de etiqueta de compilación en false en la web.archivo de configuración

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

2) También puede disminuir la frecuencia con la que ocurre mediante el establecimiento por el numRecompileBeforeAppRestart propiedad:

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

Véase el KB Article 934839 para más detalles

fije para que el problema después de que ya ha tenido lugar:

1) Eliminar archivos temporales de ASP.Net (esto lleva en el sitio)

2) Fuerce el control principal/externo para recompilar, editar y guardar el archivo de código. Esta es una mejor opción para una solución que el n. ° 1 porque esto no reduce el sitio web.

Mi sugerencia:

1) En primer lugar creo que hay que poner en su lugar el arreglo temporal # 1 desde arriba, esto podría impedir que todos los problemas en el futuro y podría ser la única respuesta que necesitamos.

2) En segundo lugar, descargaría e instalaría la revisión 934839 de Microsoft en el entorno de control de calidad para verificar que no haya ningún problema. Después de algún tiempo de probar la revisión en QA, instalaría la revisión para tener una solución permanente para este problema. En este momento podríamos eliminar el trabajo temporal alrededor del n. ° 1.

Nota: Después de poner la corrección temporal # 1, no he vuelto a tener el problema. ¡He tenido esta solución en su lugar por más de 12 meses y todo está bien!

0

La eliminación de los archivos temporales o el cambio de web.config no funcionó. Para mí, lo que lo solucionó fue reiniciar mi computadora.

Cuestiones relacionadas