c# - method - Evite que aspnet_compiler ejecute el método PreApplicationStart
remarks c# (2)
Entonces, uno de mis sitios web tiene un PreApplicationStartMethod que debe ejecutarse antes de que se inicie la aplicación:
[assembly: PreApplicationStartMethod(typeof(ServiceStackAppHost), "Start")]
Este método hace algunos bootstrapping y se basa en la configuración de la configuración.
Ahora, quiero compilar el sitio web como parte de mi proceso de compilación automatizado, por lo que invoco aspnet_compiler.exe, que falla porque ejecuta el método de aplicación previa a la aplicación:
AfterBuild:
C: / Windows / Microsoft.NET / Framework64 / v4.0.30319 / aspnet_compiler.exe -v temp -p C: / Projects / error ASPRUNTIME: El método de inicialización de inicio de la aplicación previa. mensaje de error: Falló la resolución de la dependencia, escriba = "..."
¿Cómo evito que aspnet_compiler.exe invoque PreApplicationStartMethod al compilar el sitio web?
La respuesta corta es que no puede evitar que se ejecute y que esto es por diseño pero puede solucionar el problema.
Por qué se ejecutan los métodos PreApplicationStart durante aspnet_compiler.exe
La razón es que PreApplicationStartMethod
(o WebActivator , que se basa en él) se puede usar para cosas que realmente afectan la compilación, de modo que si la omite, el sitio no se compilará.
Para darle un ejemplo, puede agregar espacios de nombres a la compilación en un método PreAppStart
, que luego afecta a la compilación de sus páginas de Razor.
Obviamente, no todos los métodos PreAppStart
que ejecutarse cuando usas aspnet_precompiler, pero los ejecutamos todos en caso de que sean necesarios.
Detectar si estás ejecutando bajo aspnet_compiler.exe
Si el código allí se rompe bajo aspnet_compiler, puede ser necesario agregar lógica condicional en el método PreAppStart
para detectar la situación y omitir la ejecución del código.
Puede consultar la PreAppStart
System.Web.Hosting.HostingEnvironment.InClientBuildManager
para determinar si su método PreAppStart
se está ejecutando en el contexto de aspnet_compiler.exe (donde será true
) o en tiempo de ejecución (donde será false
). InClientBuildManager
también se aplica a la construcción de un sitio web dentro de VS, que utiliza básicamente la misma ruta de código que aspnet_compiler.exe.
Trate de usar métodos PostStart en su lugar
Tenga en cuenta que WebActivator también admite PostApplicationStartMethod
y que no se ejecutarán bajo aspnet_compiler. Ese código se ejecuta después de Application_Start
, por lo que puede o no ser apropiado para su escenario. Pero puede ser una solución para ti.
aspnet_compiler.exe punta de depuración
No está directamente relacionado, pero es útil para la depuración: puede pasar -errorstack a aspnet_compiler.exe para obtener una pila más completa cuando hay un error.
PreApplicationStartMethod es un atributo de ensamblaje para cargar código extremadamente temprano en el proceso de construcción. El compilador debe cargar y ejecutar este código para comenzar el proceso de compilación. PreApplicationStartMethod es similar al proceso de construcción, no al proceso de Inicialización. ¡Así que puedes intentar poner tu código en el método Application_Start en global.asax!