Получить сборку ASP.NET из OnInit пользовательского серверного элемента управления? - PullRequest
0 голосов
/ 14 октября 2011

Я пытаюсь создать пользовательский серверный элемент управления ASP.NET, который отображает информацию о версии проекта ASP.NET, содержащей страницу, на которой отображается серверный элемент управления.

Каков синтаксис C # для получения сборки этого проекта ASP.NET?

То есть, учитывая переопределение OnInit внутри кода пользовательского серверного элемента управления ...

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

... что входит в Foo ()?

РЕДАКТИРОВАТЬ: Пользовательский серверный элемент управления определен в проекте / сборке библиотеки классов, которая не является проектом / сборкой ASP.NET.

1 Ответ

1 голос
/ 14 октября 2011
 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 возвращает нужную сборку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...