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 回答