Parche para algunos problemas de compilación de ASP .NET

A lo largo del último año hemos encontrado y corregido unos cuantos bugs de compilación de ASP.NET 2.0 que la gente ha ido encontrando.

Las causas de estos bugs son variadas – pero la causa principal normalmente está relacionada con tener los proyectos estructurados con una forma particular de dependencias circulares entre las páginas, y normalmente se disparan cuando ocurren cambios masivos de archivos en el sistema (por ejemplo: un antivirus actualiza todas las marcas de tiempo de los archivos a la vez).

Mensajes de error típicos:

Los mensajes de error que se exponen son ejemplos de los tipos de execpiones que podríamos ver si te das con uno de estos problemas de compilación:

Unable to cast object of type ‘ASP.masterpage_master’ to type ‘ASP.masterpage_master’.

O: 

Could not load file or assembly ‘App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The system cannot find the file specified.

O:

Compiler Error Message: CS0006: Metadata file ‘C:WINDOWSMicrosoft.NETFrameworkv2.0.50727Temporary ASP.NET Filescms.web44e73607b028acb3App_global.asax.fakktchx.dll’ could not be found

O:

System.InvalidOperationException: The resource class for this page was not found. Please check if the resource file exists and try again

Solución para estos incidentes:

Si tienes una aplicación que empieza a mostrarte estos errores, podrías applicar una solución inmediata que la soluciona abriendo el web.config de tu aplicación y poner el atributo batch=»false» en la sección <compilation>:

<configuration>    <system.web>
       
<compilation debug=»false» batch=»false»></compilation>
   
</system.web></configuration>  

Esto le dice a ASP.NET que compile los archivos .aspx/.ascx dinámicamente en assembiles separados. Esto evita la incidencia sobre referencias circularres que disparan la excepción.

También lo podéis solucionar temporalmente borrando los archivos de la cache «Temporary ASP.NET Files» siguiendo estos pasos:

  1. Clic en el botón de inicio, y clic en ejecutar, escribimos «iisreset /stop» y hacemos clic en OK.
  2. Abrir la carpeta:   «C:windowsMIcrosoft.netframeworkv2.0.50727Temporary ASP.NET Files»
  3. Borrar todos los archivos y subdirectorios.
  4. Clic en el botón de inicio, clic en ejectuar, escribir «iisreset /start» y clic en ok.

 Más detalles sobre esto lo podéis encontrar en  Microsoft KB #934839.

Parche para corregir estos problemas disponible para descarga.

Como alternativa para aplicar la configuración de antes, podeis descargaros y aplicar un parche que soluciona etos problemas.

El enlace directo para desargar este parche lo tenéis aquí.

Podeis encontrar otras parches para Visual Studio y .NET Framework aqui.

Importante: Mucha gente me pregunta si deberían instalar esos parches proactivamente (antes de que vean el error). Siempre que no lo hagan – ya que estos parches están diseñados para un problema muy concreto , y no están testeados para un producto completo. Así que, os recomiendo que apliquéis este parche si tenes ese mismo problema.

Contactando con el soporte de productos de Microsoft.

Si tenéis algún problema instalando el parche o si, una vez instalado, seguís con el mismo problema, querréis contactar con el soporte de productos de Microsoft para que os ayuden a corregirlo. Las llamadas que hagáis son gratuitas si están relacionadas con un bug del producto. Podéis encontrar los detalles de cómo contactar con ellos en esta página (os informará sobre el teléfono al que llamar por país).

La mayoría de las versiones de Visual Studio vienen también con varios tickets para soporte gratuito (por ejemplo: VS Pro de MSDN Premium viene con 4 tickets por subscripción). Podéis usar estos tickets para obtener ayuda con .NET o Visual Studio (por ejemplo: para buscar bugs o problemas de rendimiento en vuestro propio código, o para aprender cómo usar una característica del framework o el IDE).

Hay muchos ingenieros increíbles en el soporte de productos de Microsoft y es muy fácil trabajar con ellos si tenéis algún problema. Aquí tenéis algunos blogs de ellos y los recomiendo muy mucho que os subscribais a algunos de ellos:

Si tenéis algún problema que no seais capaces de solucionar o tenéis un problema con una aplicación en producción para la que necesitéis ayuda inmediata, llamad al soporte de producto de Microsoft y tendreis a algunos como los de arriba para coger un debugger y os ayudarán a averiguar qué está pasando.

Gracias,

Scott

Traducido por: Juan María Laó Ramos. Microsoft Student Partner.

0 comentarios sobre “Parche para algunos problemas de compilación de ASP .NET”

  1. miren mi error es este.. por favor colaborenme

    Error de servidor en la aplicación ‘/visitas’.
    ——————————————————————————–

    No se puede abrir la base de datos «Visitas» solicitada por el inicio de sesión. Error de inicio de sesión.
    Error de inicio de sesión del usuario ‘HOGAR-2F3DBA4DCASPNET’.
    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

    Detalles de la excepción: System.Data.SqlClient.SqlException: No se puede abrir la base de datos «Visitas» solicitada por el inicio de sesión. Error de inicio de sesión.
    Error de inicio de sesión del usuario ‘HOGAR-2F3DBA4DCASPNET’.

    Error de código fuente:

    Se ha generado una excepción no controlada durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la excepción del seguimiento de la pila siguiente.

    Seguimiento de la pila:

    [SqlException (0x80131904): No se puede abrir la base de datos «Visitas» solicitada por el inicio de sesión. Error de inicio de sesión.
    Error de inicio de sesión del usuario ‘HOGAR-2F3DBA4DCASPNET’.]
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844759
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
    System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +35
    System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +144
    System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +342
    System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +221
    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +189
    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +185
    System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31
    System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +433
    System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66
    System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +499
    System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65
    System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
    System.Data.SqlClient.SqlConnection.Open() +122
    System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState) +31
    System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +112
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
    System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1297
    System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +19
    System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
    System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
    System.Web.UI.WebControls.GridView.DataBind() +4
    System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
    System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +72
    System.Web.UI.Control.EnsureChildControls() +87
    System.Web.UI.Control.PreRenderRecursiveInternal() +44
    System.Web.UI.Control.PreRenderRecursiveInternal() +171
    System.Web.UI.Control.PreRenderRecursiveInternal() +171
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *