Замените сборку во время выполнения на .NET - PullRequest
11 голосов
/ 22 февраля 2011

Есть ли способ с системой плагинов (я бы использовал с контейнером IoC), чтобы загрузить одну версию сборки во время выполнения и затем заменить эту DLL во время работы AppDomain? Я не хочу перезапускать приложение.

MEF делает что-то подобное?

Ответы [ 5 ]

3 голосов
/ 22 февраля 2011

Это, по сути, то, что делает NUnit (или, по крайней мере, я давно не был в коде).Но он делает это, загружая тестовую сборку в другой домен приложений, вызывая код в этом домене, используя метод AppDomain DoCallback, а затем перезагружает тестовую сборку, если она перекомпилируется.

Так что пока вы не можете выгрузитьили перезагрузите dll, но вы можете выгрузить и перезагрузить домен приложения и выполнить в нем код.

1 голос
1 голос
/ 22 февраля 2011

Невозможно использовать чистый .net, потому что нет способа выгрузить сборку из домена.Поскольку MEF написан на управляемом коде, я сомневаюсь, что это возможно.Я решил эту проблему, загрузив сборку в отдельный домен, и когда мне захотелось ее перезагрузить, я остановил ее и начал снова.

0 голосов
/ 05 декабря 2013

Вы не можете выгрузить dll в работающем домене приложения. Что вы можете сделать, это использовать MEF и подготовить ваше приложение для обработки нескольких реализаций. В этом случае вы можете скопировать новую dll (новую реализацию интерфейса, модуля и т. Д.) В папку MEF, перекомпоновать и использовать ее. Но, осторожно, это будет стоить тебе памяти.

Вы можете прочитать об этом и скачать образец здесь .

0 голосов
/ 23 февраля 2011

Похоже, что CodeProject В статье объясняется, как это сделать. Этот вопрос на форумах MSDN кажется похожим, и этот ТАК вопрос показывает, как это сделать. Все эти ссылки предупреждают о утечках, возникающих из-за проблем с правильной утилизацией доменов приложений, поэтому покупатель остерегается.

...