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