2011-10-14 31 views
0

我想构建一个ASP.NET自定义服务器控件,该控件显示有关包含呈现服务器控件的页面的ASP.NET项目的版本信息。从自定义服务器控件的OnInit获取ASP.NET程序集?

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

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

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

...在发生什么美孚()?

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

回答

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

无论身在何处控件的实现,一个单独的DLL或当前之一,它会在年底Page类实例化,并添加到其控件集合。这个页面可以通过Page方法访问,并基于这个方法找到程序集。
对于.aspx文件(实际上它们中的几个如果更多),ASP .Net创建一个dll。如果“继承”属性设置,然后将生成的类看起来像:

public _Default_aspx : Namespace._Default, IHttpHandler { 
} 

此DLL是一个比由Visual Studio,一个“Web应用程序项目”的结果编制不同,我想你更感兴趣的是最新的。这个DLL有“_Default:类型,我们在Visual Studio中看到:

public _Default : System.Web.Page 
{ 
} 

那么,为什么这个小故事当this.Page.GetType()从服务器控件调用,那么,如果继承属性?这个方法会返回_Default_aspx类型,但是对于你来说是没用的,因为你需要由Visual Studio创建的程序集,而不是从aspx/ascx文件中的ASP.Net生成的程序集。如果页面或控件的Inherit属性设置了,GetType()就足够了。
知道了类型,只需调用Assembly.GetAssembly方法就可以返回你需要的程序集组。

+0

我从以前的版本中看到你已经是foun d如何获取程序集版本 –

+0

调用Assembly.GetExecutingAssembly()为我提供了定义自定义服务器控件的程序集,而不是ASP.NET程序集(这是两个不同的程序集,这是我现在只包含在其中的一个重要事实)问题 - 抱歉)。 – lance

+0

GetCallingAssembly –

相关问题