.NET: Привязка сборки к новой версии ссылочной сборки без перекомпиляции - PullRequest
2 голосов
/ 21 октября 2010


У меня есть сборка .NET со строгим именем PluginHost , которая динамически загружает сборки плагинов, используя Assembly.LoadFrom(). Он имеет версию сборки и файла 1.0.0.0. Каждая сборка плагина ссылается на PluginHost, потому что в PluginHost определен интерфейс, который должен быть реализован в каждом плагине.

Теперь я хочу развернуть обновленную, но полностью обратно совместимую версию PluginHost с сборкой и версией файла 1.0.0. 1 . Но теперь старые подключаемые модули не загружаются, так как они ссылаются на PluginHost через его строгое имя, которое включает номер версии.

Как я могу развернуть новую версию PluginHost, не ломая старые плагины?

Одно решение, которое я нашел, - это установить версию сборки PluginHost на 1.0 и поддерживать ее на уровне 1.0 даже в обновленной версии. Я меняю только File-версию с 1.0.0.0 на 1.0.0.1 и так далее с каждым новым обновлением. Таким образом старые плагин-сборки загружаются без проблем. Но так ли это? Есть ли способ лучше? Я не думаю, что оставить версию Assembly на постоянном значении правильно.

Дополнительная справочная информация, которая может представлять интерес: PluginHost используется с COM Interop в приложении VB6. Вот почему у него есть сильное имя. Ни PluginHost, ни плагины не находятся в GAC. PluginHost зарегистрирован в RegAsm.exe.

Спасибо.

Обновление

Спасибо за ваши ответы. Поскольку кажется, что нет разумного способа использовать файл конфигурации приложения с COM Interop, я думаю, что я останавливаюсь на зависании версии Assembly и меняю версию файла только в новых версиях PluginHost.

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Надеюсь, я понимаю, что вы пытаетесь сделать правильно.Если это так, одним из способов является использование элемента bindingRedirect в файле конфигурации приложения.Подробнее о перенаправлении сборок см. MSDN .

2 голосов
/ 21 октября 2010

Лично я оставляю исправление AssemblyVersion, если я не знаю, что внесу критические изменения.И в вашем случае, поскольку вы не развертываете в GAC, вы все равно не получаете преимущества от параллельного развертывания, так что будет с пользой от изменения вашего AssemblyVersion?

Если вы это сделаетенеобходимо обновить AssemblyVersion, у вас есть два варианта:

  1. Добавление элемента bindingRedirect в файл app.config потребителя.
  2. Развертывание файла Политика издателя сваша сборка.

Учитывая, что ваш потребитель VB, это исключает использование app.config.Это оставляет вас с развертыванием вашего PluginHost в GAC и использованием файла политики издателя.

...