19

VirtualPathProvider のカスタマイズの練習中に、MSDN http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathproviderに従って、カスタム VirtualPathProvider を Global.asax または AppInitialize メソッドに登録できることがわかりました。 .aspx . ただし、MSDN では AppInitialize メソッドについて明確に説明していません。

App_code フォルダーの静的な AppInitialize メソッドは、起動時に ASP.NET ランタイムによって自動的に呼び出されますか?

4

1 に答える 1

36

AppInitialize() メソッドに関する貴重なドキュメントはほとんどありませんが、App_Code フォルダー内のクラスには次のようなメソッド シグネチャが含まれているという想定は正しいです。

public static void AppInitialize()

Asp.Net アプリケーションの起動時に呼び出されます。App_Code は Asp.Net にとって特別なフォルダーであり、その中のすべてが少し異なる方法で処理されることに注意してください。App_Code フォルダーのすべての小さな癖 (前述のような) に関するドキュメントを見つけてください。

ただし、AppInitialize() メソッドの署名を含めることができるクラスは 1 つだけであることに注意してください。そうしないと、実行時に次のようなコンパイラ エラーが発生します。

AppInitialize メソッドは、「App_Code.SomeClassOne」と「App_Code.SomeClassTwo」の両方で定義されています。

したがって、これは完全に有効ですが:

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

これにより、上記のコンパイラ エラーが生成されます。

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

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

これで問題が少し解決することを願っています:)

于 2008-12-01T12:45:23.487 に答える