Si bien hay muy poca documentación sobre el método AppInitialize(), estás en lo correcto en su suposición de que cualquier clase en la carpeta App_Code que contiene una firma método como este:
public static void AppInitialize()
será invocado cuando el La aplicación Asp.Net se inicia. Recuerde que App_Code es una carpeta especial para Asp.Net y todo lo que hay adentro se trata de manera un poco diferente. Buena suerte para encontrar documentación sobre todas las pequeñas peculiaridades (como la mencionada anteriormente) de la carpeta App_Code.
Otra cosa a recordar, sin embargo, es que una sola clase puede contener una firma para el método AppInitialize() o de lo contrario obtendrá un error de compilación en tiempo de ejecución similar a esto:
El método AppInitialize se define ambos en 'App_Code.SomeClassOne' y en 'App_Code.SomeClassTwo'.
Así, mientras que esto es perfectamente válido:
public class SomeClassOne
{
public static void AppInitialize()
{
HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
}
}
Esto generará el error del compilador que he mencionado anteriormente:
public class SomeClassOne
{
public static void AppInitialize()
{
HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
}
}
public class SomeClassTwo
{
public static void AppInitialize()
{
HostingEnvironment.Cache["InitializationTimeTwo"] = DateTime.Now;
}
}
Espero que esto aclare un poco las cosas para ti :)
Esto es muy útil. ¿Alguna idea de dónde encontrar otros ejemplos de comportamientos especiales de App_Code? –
Tuve esto trabajando en un servicio web WCF durante algún tiempo, y de repente misteriosamente dejó de funcionar. Si ejecuto el servicio web en Visual Studio, la inicialización tiene lugar, pero si lo despliego a IIS no parece haber ninguna inicialización. Podría jurar que esto estaba funcionando, y ahora de repente no lo es. ¿Algunas ideas? – Farinha
Encontrado el problema. Cambié la "Acción de compilación" en el archivo .cs que contenía la inicialización de "Contenido" a "Compilar" en un intento de no copiar la carpeta "Código_aplicación" en la carpeta de publicación del servicio web. Bueno, eso no se puede hacer ... – Farinha