2012-03-21 5 views
0

Использование System.AddIn, есть способ загрузить и активировать AddIn без блокировки DLL-файла? Я хочу удалить или переопределить файл для загрузки новой версии моего AddIn.C# MAF Активировать AddIn без блокировки dll

Единственный способ разблокировать файл в данный момент - это закрыть AddIn. Но мне нужно постоянно держать его в живых для входящих звонков (Async-сервис, да, кошмар).

Возможно, есть еще один способ обновить AddIns во время выполнения, и я не делаю это правильно. Я хотел бы знать, что это может быть правильный способ сделать это. Благодаря!

ответ

1

Как насчет функциональности ShadowCopy класса System.AppDomain?

Я не дал ему попробовать, но вы можете попробовать следующее:

  1. Создать AppDomainSetup.
  2. В экземпляре AppDomainSetup для ShadowCopyFiles задано значение true.
  3. В экземпляре AppDomainSetup установите ShadowCopyFilesDirectories в путь каталога, в котором содержатся сборки, которые вы хотите уметь выполнять во время выполнения. Это может быть просто каталог, в котором расположена надстройка. Вы должны поэкспериментировать.
  4. В экземпляре AppDomainSetup задайте все остальное в соответствии с вашими потребностями.
  5. Используйте this overload of AppDomain.CreateAppDomain для создания нового домена приложения.
  6. Загрузите надстройку using this overload of AddInToken.LoadAddIn

Вы можете найти более подробную информацию о теневом копировании here. Также прочитайте эту тему на странице System.AddIn Tools and Samples на CodePlex.

0

Как только вы загрузите новую версию, как вы ожидаете, что передача обслуживания будет работать?

Похоже, вам нужны два надстройки: один (который вы никогда не изменяете), чтобы просто получать и буферизовать входящие вызовы, а другой (который вы меняете) выполнять работу по обработке этих вызовов. Затем вы можете отключить и обновить надстройку обработки. Кроме того, получающая сообщения надстройка может буферизовать асинхронные вызовы до тех пор, пока не будет запущена и запущена новая версия надстройки обработки.

+0

Я уже думаю об этом, всегда держите его активным, пока другой обновляется. Однако, поскольку мне нужно удалить и переместить файлы, файл «живой» AddIn заблокирован. Это сложный сценарий. Вот почему я ищу, если есть возможность загрузить, не блокируя файл. Благодаря! – BlackCath