2012-08-23 59 views
0

我想從ASP.NET模板(.aspx)代碼隱藏類中獲取名稱空間。代碼隱藏文件包含類似:使用反射從ASP.NET模板代碼隱藏類中獲取名稱空間?

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,文化=中立,公鑰=空」

發生了什麼事MyTopNamespace,並且可以將其從使用反射型獲得的?

回答

1

這是因爲頁面是在運行時編譯的,然後給它一個臨時的程序集,命名空間,有時候還有一個臨時的類名(在這個例子中似乎沒有)。無法從通過運行時編譯實例化的頁面實例中檢索以前的命名空間。