在ASP.NET中调用AppInitialize方法?

Mor*_*eng 19 asp.net startup

在自定义VirtualPathProvider的过程中,我发现根据MSDN可以在Global.asax或AppInitialize方法中注册自定义VirtualPathProvider http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider .aspx.但是,MSDN没有清楚地描述AppInitialize方法.

启动时,ASP.NET运行时是否会自动调用App_code文件夹中的任何静态AppInitialize方法?

Jos*_*osh 34

虽然关于AppInitialize()方法的文档很少,但是你的假设是正确的,你的App_Code文件夹中包含方法签名的任何类都是正确的:

public static void AppInitialize()
Run Code Online (Sandbox Code Playgroud)

将在Asp.Net应用程序启动时调用.请记住,App_Code是Asp.Net的一个特殊文件夹,其中的所有内容都有不同的处理方式.祝你在App_Code文件夹的所有小怪癖(如上所述)上找到文档.

但要记住的另一件事是,只有一个类可以包含AppInitialize()方法的签名,否则您将在运行时遇到类似于此的编译器错误:

AppInitialize方法在'App_Code.SomeClassOne'和'App_Code.SomeClassTwo'中定义.

所以虽然这是完全有效的:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}
Run Code Online (Sandbox Code Playgroud)

这将生成我上面提到的编译器错误:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}

public class SomeClassTwo
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeTwo"] = DateTime.Now;
    } 
}
Run Code Online (Sandbox Code Playgroud)

我希望这能为你解决一些问题:)

  • @CodeBlend - 这是一个非常古老的答案,它早于最新的AppStart模式.现在大多数特殊的ASP.Net文件夹都被避免了,ASP.Net的下一个版本使用了完全不同的模型. (3认同)
  • 我有一段时间在WCF Web服务中工作,突然它神秘地停止工作.如果我在Visual Studio中运行Webservice,则会进行初始化,但如果我将其部署到IIS,则不会进行初始化.我发誓这是有效的,现在突然间没有了.有任何想法吗? (2认同)