asp.net - 使用反射从 ASP.NET 模板代码隐藏类获取命名空间?

标签 asp.net reflection namespaces code-behind

我正在尝试从 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 ...
}

异常输出:

Unexpected namespace or assembly:

'ASP.pageclass_aspx'

'App_Web_pageclass.aspx.cdcab7d2.v4dudq3x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'

'ASP.pageclass_aspx, App_Web_pageclass.aspx.cdcab7d2.v4dudq3x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'



发生了什么MyTopNamespace ,并且可以使用反射从类型中获得吗?

最佳答案

这是因为页面是在运行时编译的,然后给它一个临时程序集、命名空间,有时还有一个临时类名(在这个例子中似乎不是)。无法从通过运行时编译实例化的页面实例中检索先前的命名空间。

关于asp.net - 使用反射从 ASP.NET 模板代码隐藏类获取命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095650/

相关文章:

c# - 添加 using 语句或编写 namespace.classname 方法有什么区别

wpf - 在 DataTemplate DataType 中使用命名空间

c# - 如何在运行时设置 ChartArea 的 BackImage?

asp.net - 如何从 SQL 查询中过滤具有唯一 ID 的旧条目

asp.net - 如何确认异步 EF6 wait db.SaveChangesAsync() 是否按预期工作?

.net - F# 转换为编译时未知的类型

c# - 比较具有相同数据的两个对象

python - 防止包导入自身

c# - 如何使文本在网络表单上居中?

java - 检查@XmlElement是否有name属性