Здесь я нахожусь в настоящей головной царапине ... и, похоже, это одна из наиболее неприятных тем ASP.NET.Компиляция/встраивание ASCX-шаблоны UserControls для повторного использования в нескольких веб-приложениях
У меня есть сборка, которая реализует множество пользовательских материалов Linq, которые на своем ядре имеют нулевые функциональные возможности в Интернете. У меня есть дополнительная сборка, которая расширяет эту сборку с помощью веб-поведения.
Веб-специфическое поведение имеет пару пользовательских элементов управления, помеченных внутри ASCX-шаблонов UserControls.
У меня возникли проблемы с хорошей отделкой на этой сборке, поэтому ее просто перераспределить для использования в других приложениях. Позвольте мне проверить, что я пробовал до сих пор:
- Скопировал файлы ASCX в потребляющее веб-приложение, используя события сборки; далеко не идеальный и довольно кошмар для развертывания.
- Внедрение пользовательского VirtualPathProvider и встраивание шаблонов ASCX в сборку в виде встроенных ресурсов. К сожалению, когда вы используете директиву Register в приложении-потребителе, он создает объявление конструктора в качестве UserControl, где мне требуется объявление фактического типа управления; непредвиденные (как правило) и нежелательные.
- Создал проект веб-развертывания для компиляции UserControls, но скомпилированные пользовательские элементы управления затем становятся частью другой сборки и больше не опускаются от определений классов в моей веб-сборке - сборке необходимо создать их в зависимости от запроса контекст.
Так номер 1 это просто дерьмо, номер 2 не дает мне тип поддержки я желаю и номер 3, я думаю, что я собираюсь производить разумное решение с:
- Убейте все классы без управления в папку
App_Code
, подготовьте заводский класс, который будет строить объект желаемого типа управления с использованием отражения и ожидание того, что отображаемый тип будет присутствовать в выводе развертывания (мы надеемся, гарантировано наличиемClassName
атрибут в директивеControl
).
Theres также всегда является другой возможностью переписывания элементов управления ASCX в пользовательские элементы управления, но просто не имеют ресурсов, чтобы рассмотреть это на данный момент, и у нас нет опыта в этом, и они работают точно как UserControls.
Я пропустил что-то очевидное, что-то, может быть, намного проще, или это просто целенаправленно сложно? Я читал рассказы о процессе компиляции ASP.NET, очень сожаления в его дизайне в моих путешествиях по этой теме.