Archivos temporales de compilación de ASP.NET

Esta pregunta ha surgido hoy en uno de mis cursos de desarrollo Web y me ha parecido interesante para comentarla aquí.

Como es sabido ASP.NET Web Forms hace uso de una serie de archivos de código auto-generados para “mezclar” su código con las clases “code-beside” que contienen los eventos y el código que escribimos para los formularios Web, por medio del uso de clases parciales y herencia.

Nota: Por ejemplo, en la página Default.aspx, su archivo “code-beside” sería Default.aspx.cs o Default.aspx.vb en función de si programamos en C# o VB

Este código se genera dinámicamente al compilar el sitio Web y, en teoría, se almacena para hacer caché en la carpeta:

C:WindowsMicrosoft.NETFrameworkvx.y.zzzzTemporary ASP.NET Files

siendo x.y.zzzz la versión de la plataforma que tengamos instalada, que en caso de .NET 4.0 es “v4.0.30319” y en las demás versiones anteriores (2.0, 3.0 y 3.5) es “v2.0.50727” (ya he dicho muchas veces que las versiones 2.0, 3.0 y 3.5 son lo mismo a efectos de ASP.NET).

Los archivos tienen nombres aleatorios por lo que hay que andar mirando qué tiene cada uno dentro, pero en aplicaciones pequeñas es muy fácil localizar partes concretas y formularios específicos y ver qué se hace por debajo:

CodigoAutogeneradoASPNETArchivos 
Pulsa para aumentar

El caso es que si ejecutamos una aplicación Web desde Visual Studio resulta muy interesante echarle un vistazo a estos archivos para ver cómo funciona todo esto por debajo:

CodigoAutogeneradoASPNET
Pulsa para aumentar

Realmente lo que vemos ahí es el funcionamiento interno de los Web Forms. Se puede aprender mucho y recomiendo a mis alumnos que le echen un vistazo para ver cómo es.

¿Por qué mi carpeta “Temporary ASP.NET Files” está vacía?

El problema es que en Windows Vista y Windows 7 esto parece no funcionar y si vas a esta carpeta probablemente la encontrarás vacía. En Windows XP no hay problema en general.

El motivo es que esta carpeta se usa como caché de la compilación pero no es necesaria. Si no se puede acceder a ella por lo que sea la aplicación se compila en memoria de cada vez y punto.

En Windows Vista/7 aunque hayas accedido a tu equipo usando una cuenta de administrador, en realidad ejecutas los procesos con permisos recortados, por seguridad. Por eso cuando intentas hacer algo que requiere elevación de privilegios obtienes una preciosa ventanita modal de sistema que te pide autorización.

La carpeta de archivos temporales de ASP.NET necesita elevación de privilegios para poder escribir en ella. Si entras como administrador en la máquina y ejecutas Visual Studio simplemente pulsando en su acceso directo, en realidad lo estás ejecutando como un usuario sin privilegios administrativos. Por eso al compilar no te aparecen los archivos temporales en la carpeta, pues no tienes permisos.

Sin embargo, si ejecutas Visual Studio como administrador:

VS2010Administrador

Es decir, pulsas con el botón derecho en su acceso directo y eliges la opción de la figura.

En este caso tendrás acceso a la carpeta y verás como se guardan en ella los archivos temporales.

Échales un vistazo. Aprenderás un montón sobre el funcionamiento interno de ASP.NET.

Cambiar la carpeta temporal de ubicación

Si quieres puedes cambiar la ubicación de esta carpeta temporal a cualquier otra en tu disco duro, con otros permisos y por lo tanto accesible desde un usuario sin privilegios.

Para ello sólo tienes que usar el atributo tempDirectory del elemento compilation dentro de Web.config, por ejemplo:

<configuration>
   <system.web>
      <compilation tempDirectory=»C:TempASPNET»>
     </compilation>
   </system.web>
</configuration>

Con esto podrás tener más a mano los archivos a efectos de investigar y aprender. No lo recomiendo para aplicaciones de producción.

¡Espero que te sea útil!

Sin categoría

Deja un comentario

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