0

ASP.NET テンプレート (.aspx) 分離コード クラスから名前空間を取得しようとしています。コード ビハインド ファイルには、次のようなものが含まれています。

namespace MyTopNamespace.SubNamespace
{
    public partial class PageClass : System.Web.UI.Page
    {
        // ...
    }
}

PageClassそして、このインスタンスを次のメソッドに渡します。

private static string GetNamespace(Page page)
{
    const string desiredPart = "MyTopNamespace";
    if (page == null)
    {
        throw new ArgumentNullException("page");
    }
    string pageNamespace = page.GetType().FullName;

    // For debugging
    string pageAssembly = page.GetType().Assembly.FullName;
    string pageAsmQualified = page.GetType().AssemblyQualifiedName;

    if (!pageNamespace.Contains(desiredPart) && 
        !pageAssembly.Contains(desiredPart) &&
        !pageAsmQualified.Contains(desiredPart))
    {
        throw new ApplicationException(string.Format(
            "Unexpected namespace or assembly: \n\n'{0}'\n'{1}'\n'{2}'", 
             pageNamespace, pageAssembly, pageAsmQualified)); 
    }
    // Remaining implementation ...
}

例外出力:

予期しない名前空間またはアセンブリ:

「ASP.pageclass_aspx」

「App_Web_pageclass.aspx.cdcab7d2.v4dudq3x、バージョン = 0.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null」

「ASP.pageclass_aspx、App_Web_pageclass.aspx.cdcab7d2.v4dudq3x、バージョン = 0.0.0.0、カルチャ = ニュートラル、PublicKeyToken = null」

に何が起こったMyTopNamespaceのですか? リフレクションを使用して型から取得できますか?

4

1 に答える 1

1

これは、ページが実行時にコンパイルされ、一時的なアセンブリ、名前空間、および一時的なクラス名が与えられるためです (この例ではそうではないようです)。ランタイム コンパイルによってインスタンス化されたページ インスタンスから以前の名前空間を取得する方法はありません。

于 2012-08-23T16:01:09.077 に答える