public Assembly GetPageAssembly()
{
var pageType = Page.GetType();
return Assembly.GetAssembly(pageType.BaseType == null
|| pageType.BaseType == typeof (Page)
? pageType : pageType.BaseType);
}
Независимо от того, где находится реализация элемента управления, отдельная dll или текущая, в конце она будет реализована в классе Page и добавлена в его коллекцию Controls.Эта страница доступна через метод Page и, основываясь на этом, найдет сборку.Для файла .aspx (на самом деле пара из них, если больше), ASP .Net создает DLL.Если установлен атрибут «Inherit», то сгенерированный класс будет выглядеть примерно так:
public _Default_aspx : Namespace._Default, IHttpHandler {
}
Эта dll отличается от той, которая скомпилирована Visual Studio, является результатом «проекта веб-приложения» и Iдумаю, что вы заинтересованы больше для последних.Эта dll имеет тип «_Default:», который мы видим в Visual Studio:
public _Default : System.Web.Page
{
}
Так почему этот короткий рассказ? Когда this.Page.GetType () вызывается из серверного элемента управления, тогда, еслиАтрибут Inherit установлен, метод будет возвращать тип _Default_aspx, но он бесполезен для вас, поскольку вам нужна сборка, созданная Visual Studio, а не сборка, созданная ASP .Net из файлов aspx / ascx. Если страница или элемент управления имеет InheritАтрибут установлен, тогда GetType () достаточно.Зная тип, просто вызов метода Assembly.GetAssembly возвращает нужную сборку.