避免运行PreApplicationStart方法的aspnet_compiler

dri*_*iis 24 .net c# asp.net aspnet-compiler

因此,我的一个网站有一个应该在应用程序启动之前运行的PreApplicationStartMethod:

[assembly: PreApplicationStartMethod(typeof(ServiceStackAppHost), "Start")]
Run Code Online (Sandbox Code Playgroud)

此方法执行一些引导并依赖于某些配置.

现在,我想编译网站作为我的自动构建过程的一部分 - 所以我调用aspnet_compiler.exe,因为它运行PreApplicationStartMethod而失败:

AfterBuild:
C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v temp -p C:\ Projects\error ASPRUNTIME:预应用程序启动初始化方法启动类型RedactedNameSpace.ServiceStackAppHost引发异常以下错误消息:依赖项的解析失败,type ="..."

在编译网站时,如何避免aspnet_compiler.exe调用PreApplicationStartMethod?

Dav*_*bbo 31

简短的回答是你不能阻止它运行,这是设计的,你可以解决问题.

为什么在aspnet_compiler.exe期间运行PreApplicationStart方法

原因是PreApplicationStartMethod(或者构建在它之上的WebActivator)可以用于实际影响编译的事情,这样如果你省略它,那么网站可能无法编译.

举个例子,您可以在PreAppStart方法中将命名空间添加到编译中,然后影响Razor页面的编译.

显然,并不是每个PreAppStart方法都需要在使用aspnet_precompiler时运行,但我们会在需要时运行所有这些方法.

检测您是否在aspnet_compiler.exe下运行

如果aspnet_compiler中的代码中断,则可能需要在PreAppStart方法中添加条件逻辑来检测情况并省略运行代码.

您可以查看System.Web.Hosting.HostingEnvironment.InClientBuildManager属性以确定您的PreAppStart方法是在aspnet_compiler.exe(它将在何处true)的上下文中运行,还是在运行时(它将在何处false)运行.InClientBuildManager也适用于在VS中构建网站,该网站使用与aspnet_compiler.exe基本相同的代码路径.

请尝试使用PostStart方法

请注意,WebActivator也支持PostApplicationStartMethod,并且不会在aspnet_compiler下运行.该代码在之后 运行Application_Start,因此它可能适合您的方案,也可能不适合您的方案.但它可能是你的解决方案.

aspnet_compiler.exe调试提示

不直接相关但对调试很有用:您可以将-errorstack传递给aspnet_compiler.exe,以便在出现错误时获得更完整的堆栈.

  • 有没有办法实际检测到您是在编译模式下运行而不是作为实时网站? (2认同)