Динамически не ссылаться на DLL в C# Winforms

У меня есть приложение winform C#.

Я могу использовать [веб-метод], чтобы проверить версию DLL, которую должен использовать мой клиент winform. Я также могу скачать его. Но если я скопирую старую DLL, то получу сообщение об ошибке, что файл используется. Я ожидал этого.

Есть ли способ выгрузить эту DLL из моего запущенного приложения winform, скопировать ее и перезагрузить?

Я не хочу использовать загрузчик для моего средства обновления, и может возникнуть необходимость остановить и перезапустить мое приложение.

Все это устареет, если я смогу просто выгрузить свою DLL.

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

Спасибо

PS Я мог бы опубликовать код, который показывает, как загрузить DLL в код и сгенерированную из нее ошибку, но это открытые знания и не добавляет к этому вопросу.

2 ответа

Решение

Есть ли способ выгрузить эту DLL из моего запущенного приложения winform, скопировать ее и перезагрузить?

Не в большинстве случаев. Единственный способ выгрузить DLL в управляемом приложении - это выгрузить весь AppDomain. Обычно это означает, что вы должны быть очень осторожны с тем, как вы используете сборку (вы не можете просто ссылаться и использовать ее как обычно).

Я не хочу использовать загрузчик для моего средства обновления, и может возникнуть необходимость остановить и перезапустить мое приложение.

Это самый распространенный подход. Выполнение этой работы внутри приложения - это, по сути, встраивание загрузчика в само приложение (в его собственный домен приложения) и выгрузка / перезапуск домена приложения с использованием сборки. Как правило, это больше работы и столь же разрушительно, как отдельное приложение начальной загрузки.

Вы, наверное, ищете что-то вроде MEF?

http://mef.codeplex.com/

http://msdn.microsoft.com/en-us/library/dd460648(v=vs.110).aspx

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