繁体   English   中英

从自定义服务器控件的OnInit获取ASP.NET程序集?

[英]Get ASP.NET assembly from OnInit of custom server control?

我正在尝试构建一个ASP.NET自定义服务器控件,该控件显示有关ASP.NET项目的版本信息,该版本信息包含在其上呈现服务器控件的页面。

获取该ASP.NET项目的程序集的C#语法是什么?

也就是说,鉴于此OnInit覆盖了自定义服务器控件的代码中...

protected override void OnInit(EventArgs e) {
    System.Reflection.Assembly assembly = Foo();
}

... Foo()中发生了什么?

编辑:自定义服务器控件定义在不是ASP.NET项目/程序集的类库项目/程序集中。

 public Assembly GetPageAssembly()
 {
   var pageType = Page.GetType();
   return Assembly.GetAssembly(pageType.BaseType == null 
                                || pageType.BaseType == typeof (Page)
                                     ? pageType : pageType.BaseType);
 }

无论控件的实现在哪里,是单独的dll还是当前的dll,最后都将在Page类中实例化该dll,并将其添加到其Controls集合中。 可通过Page方法访问此Page,并在此基础上找到程序集。
对于.aspx文件(如果有更多文件,实际上是几个文件),ASP .Net创建一个dll。 如果设置了“ Inherit”属性,则生成的类将类似于:

public _Default_aspx : Namespace._Default, IHttpHandler {
}

该dll与Visual Studio编译的dll不同,后者是“ Web应用程序项目”的结果,我想您对最新消息更感兴趣。 该dll具有我们在Visual Studio中看到的“ _Default:”类型:

public _Default : System.Web.Page
{
}

那为什么这么短的故事呢? 从服务器控件调用this.Page.GetType()时,如果设置了Inherit属性,则该方法将返回_Default_aspx类型,但对您无用,因为您需要Visual Studio创建的程序集,而不是一个由ASP .Net从aspx / ascx文件生成。 如果页面或控件设置了Inherit属性,则只要使用GetType()就可以了。
知道类型后,只需调用Assembly.GetAssembly方法即可返回所需的程序集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM