2010-10-20 5 views
2


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

Теперь я хочу развернуть обновленную, но полностью совместимую с возвратом версию PluginHost с Assembly- и File-Version 1.0.0. . Но теперь старые сборки плагинов не загружаются, поскольку они ссылаются на PluginHost через свое сильное имя, которое включает номер версии.

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

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

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

спасибо.

Update

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

+2

Обратите внимание, что изменение версии файла является обычной практикой. Microsoft делает это на версиях с номерами версий, отличных от версии .NET. Они будут работать с файловыми версиями, но убедитесь, что версия сборки остается такой же, чтобы никто не разбивал код (до следующей крупной версии). –

ответ

4

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

+0

К сожалению, нет никакого разумного способа использования файла конфигурации приложения при использовании COM Interop. –

2

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

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

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

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

Смежные вопросы