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方法就可以返回你需要的程序集组。
我从以前的版本中看到你已经是foun d如何获取程序集版本 –
调用Assembly.GetExecutingAssembly()为我提供了定义自定义服务器控件的程序集,而不是ASP.NET程序集(这是两个不同的程序集,这是我现在只包含在其中的一个重要事实)问题 - 抱歉)。 – lance
GetCallingAssembly –