在ASP.NET应用程序启动并初始化所有组件之前,代码执行的绝对最早位置是怎样的?

2026-03-30 11:521阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计717个文字,预计阅读时间需要3分钟。

在ASP.NET应用程序启动并初始化所有组件之前,代码执行的绝对最早位置是怎样的?

在ASP.NET中,以下是在应用程序启动时执行初始化代码的几种方式,以及它们的执行顺序:

1. 处理web.config文件:当ASP.NET启动应用程序时,它会首先读取web.config文件以配置应用程序设置。

2. WebActivator: - PreApplicationStartMethod:这是在应用程序启动之前执行的方法,通常用于全局应用程序级别的初始化。 - PostApplicationStartMethod:这是在所有其他初始化完成后执行的方法。

3. Global.asax文件: - Application_Start:这是在应用程序启动时执行的方法,它通常用于初始化应用程序级别的对象和设置。

在ASP.NET应用程序启动并初始化所有组件之前,代码执行的绝对最早位置是怎样的?

执行顺序大致如下:

1. 读取web.config文件。

2.执行所有标记为`PreApplicationStartMethod`的方法。

3.执行Global.asax中的`Application_Start`方法。

4.执行所有标记为`PostApplicationStartMethod`的方法。

没有其他附加的初始化步骤在上述步骤之前执行。这些步骤确保了应用程序的初始化代码按顺序执行,从而确保了应用程序的稳定性和一致性。

有许多地方可以在ASP.NET中执行初始化代码:

>处理web.config
> WebActivator PreApplicationStartMethod
> WebActivator PostApplicationStartMethod
> Global.asax Application_Start

这些事件的排序是什么?是否还有其他附加项目应该列入此列表?

编辑:由于有人提到静态与第一个调用位置相关,我将为它们打破这个问题

WebActivator PreApplicationStartMethod中使用的Foo类

>静态构造函数
>静态只读字段

WebActivator PostApplicationStartMethod中使用的Bar类

>静态构造函数
>静态只读字段

在Global.asax Application_Start中使用的Baz类

>静态构造函数
>静态只读字段

为清楚起见,假设在上面的例子中,每个例子都依赖于在该位置使用的Foo / Bar / Baz类,并且该类包含静态构造函数和静态只读字段.

静态构造函数和静态字段初始化由运行时确定,而不是ASP.NET. Eric Lippert最近发布了一篇精彩的 four– part blog series,详细介绍了它们的工作原理.

至于你提到的其他项目,首先执行标有System.Web.PreApplicationStartMethodAttribute的方法.根据此属性的MSDN文档,无法保证调用这些方法的顺序.

根据Phil Haack的a blog post,该属性使开发人员有机会在应用程序启动期间调用另外两种方法:BuildProvider.RegisterBuildProviderBuildManager.AddReferencedAssembly. BuildManager.AddReferenceAssembly的MSDN文档声明此方法只能在应用程序的Application_PreStartInit阶段执行,这表明当执行System.Web.PreApplicationStartMethodAttribute标记的所有方法时.

WebActivator使用框架的PreApplicationStartMethodAttribute挂钩到应用程序的启动.一旦被调用,它将搜索并执行WebActivator.PreApplicationStartMethodAttribute标记的所有方法,然后动态注册an HttpModule,稍后将调用PostApplicationStartMethodAttribute标记的所有方法 – 在HttpApplication类中调用Application_Start之后.

总而言之,订单是:

> Web.config被读入内存>使用PreApplicationStartMethodAttribute标记的方法> HttpApplication.Application_Start>使用WebActivator.PostApplicationStartMethodAttribute标记的方法

标签:地方

本文共计717个文字,预计阅读时间需要3分钟。

在ASP.NET应用程序启动并初始化所有组件之前,代码执行的绝对最早位置是怎样的?

在ASP.NET中,以下是在应用程序启动时执行初始化代码的几种方式,以及它们的执行顺序:

1. 处理web.config文件:当ASP.NET启动应用程序时,它会首先读取web.config文件以配置应用程序设置。

2. WebActivator: - PreApplicationStartMethod:这是在应用程序启动之前执行的方法,通常用于全局应用程序级别的初始化。 - PostApplicationStartMethod:这是在所有其他初始化完成后执行的方法。

3. Global.asax文件: - Application_Start:这是在应用程序启动时执行的方法,它通常用于初始化应用程序级别的对象和设置。

在ASP.NET应用程序启动并初始化所有组件之前,代码执行的绝对最早位置是怎样的?

执行顺序大致如下:

1. 读取web.config文件。

2.执行所有标记为`PreApplicationStartMethod`的方法。

3.执行Global.asax中的`Application_Start`方法。

4.执行所有标记为`PostApplicationStartMethod`的方法。

没有其他附加的初始化步骤在上述步骤之前执行。这些步骤确保了应用程序的初始化代码按顺序执行,从而确保了应用程序的稳定性和一致性。

有许多地方可以在ASP.NET中执行初始化代码:

>处理web.config
> WebActivator PreApplicationStartMethod
> WebActivator PostApplicationStartMethod
> Global.asax Application_Start

这些事件的排序是什么?是否还有其他附加项目应该列入此列表?

编辑:由于有人提到静态与第一个调用位置相关,我将为它们打破这个问题

WebActivator PreApplicationStartMethod中使用的Foo类

>静态构造函数
>静态只读字段

WebActivator PostApplicationStartMethod中使用的Bar类

>静态构造函数
>静态只读字段

在Global.asax Application_Start中使用的Baz类

>静态构造函数
>静态只读字段

为清楚起见,假设在上面的例子中,每个例子都依赖于在该位置使用的Foo / Bar / Baz类,并且该类包含静态构造函数和静态只读字段.

静态构造函数和静态字段初始化由运行时确定,而不是ASP.NET. Eric Lippert最近发布了一篇精彩的 four– part blog series,详细介绍了它们的工作原理.

至于你提到的其他项目,首先执行标有System.Web.PreApplicationStartMethodAttribute的方法.根据此属性的MSDN文档,无法保证调用这些方法的顺序.

根据Phil Haack的a blog post,该属性使开发人员有机会在应用程序启动期间调用另外两种方法:BuildProvider.RegisterBuildProviderBuildManager.AddReferencedAssembly. BuildManager.AddReferenceAssembly的MSDN文档声明此方法只能在应用程序的Application_PreStartInit阶段执行,这表明当执行System.Web.PreApplicationStartMethodAttribute标记的所有方法时.

WebActivator使用框架的PreApplicationStartMethodAttribute挂钩到应用程序的启动.一旦被调用,它将搜索并执行WebActivator.PreApplicationStartMethodAttribute标记的所有方法,然后动态注册an HttpModule,稍后将调用PostApplicationStartMethodAttribute标记的所有方法 – 在HttpApplication类中调用Application_Start之后.

总而言之,订单是:

> Web.config被读入内存>使用PreApplicationStartMethodAttribute标记的方法> HttpApplication.Application_Start>使用WebActivator.PostApplicationStartMethodAttribute标记的方法

标签:地方