Управление слабосвязанными ссылками на сборки, возникающими в результате использования атрибута "Конструктор"

Мы создаем множество компонентов, WinForms, операций Workflow и т. Д., И то, что мы часто используем, это атрибут "Designer". Общая практика при начальной разработке заключается в том, что атрибут Designer используется вместе с [Designer(typeof(DesignerType))] стиль, чтобы заставить вещи работать - потом, это преобразуется в [Designer("AssemblyQualifiedTypeName")]Это позволяет удалить DLL разработчика из списка ссылок компонента - это устраняет необходимость для потребителя компонента развертывать DLL разработчика вместе со своим продуктом. Такая практика разделения кода времени разработки и времени выполнения на две отдельные библиотеки DLL является обычной практикой, и я являюсь ее сторонником.

Отрицательный побочный эффект заключается в том, что "имя типа с указанием сборки" будет включать версию сборки dll конструктора, поэтому при увеличении версии необходимо выполнить "поиск и замену" по всему продукту, чтобы убедиться, что они обновили все ". бесполезные ссылки на этого дизайнера.

Наконец, мой вопрос: может ли кто-нибудь порекомендовать лучшую практику, которая не полагается на "поиск и замену", которая может управлять всеми этими ссылками, чтобы гарантировать, что они всегда актуальны? У нас часто бывает ленивый разработчик, забывающий обновить строку ссылки, что приводит к появлению новой версии компонента, ссылающейся на предыдущую версию библиотеки конструктора DLL - которая, конечно, не развертывается, поэтому поддержка во время разработки теряется. Возможно, какая-то форма прагм, макросов, сценариев сборки, магических атрибутов, я не знаю, но должен быть лучший способ сделать это.

Кто-нибудь? (Спасибо)

2 ответа

Почему бы не создать единый конструктор, который использует что-то вроде внутренней структуры Managed Addin Framework или Activator.CreateInstance для выбора и отображения дизайнера? С помощью этой техники атрибут Designer никогда не придется менять...

Делайте это так, как Microsoft. Взгляните на класс AssemblyRef (System.Windows.Forms.dll) в Reflector.

Другие вопросы по тегам