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

本文关键字:NET 程序集 OnInit 自定义 服务器控件 ASP | 更新日期: 2023-09-27 18:11:29

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

获取ASP. js程序集的c#语法是什么?净项目吗?

也就是说,给定这个OnInit覆盖在自定义服务器控件的代码…

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

…Foo()里面有什么?

EDIT:自定义服务器控件是在类库项目/程序集中定义的,而不是ASP. s。净项目/组装。

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

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

无论控件的实现在哪里,是一个单独的dll还是当前的dll,它最终都会在Page类中实例化并添加到控件集合中。此页面可通过Page方法访问,并以此为基础查找程序集。
对于一个.aspx文件(如果更多的话,实际上有几个),asp.net创建一个dll。如果设置了"Inherit"属性,那么生成的类将看起来像这样:

public _Default_aspx : Namespace._Default, IHttpHandler {
}

这个dll不同于Visual Studio编译的那个,它是一个"Web应用程序项目"的结果,我想你对最新的更感兴趣。这个dll具有我们在Visual Studio中看到的"_Default:"类型:

public _Default : System.Web.Page
{
}

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