Перезагрузите ссылку на лету (C # .NET) - PullRequest
2 голосов
/ 23 октября 2009

Хорошо, вот краткое изложение ...

У меня есть служба, которая работает, и она ссылается на DLL, которая сильно изменилась. Мы надеемся, что эта служба будет иметь несколько клиентов, одновременно обращающихся к ней, поэтому было бы неэффективно завершать ее работу и перекомпилировать / перезагружать с новой ссылкой. Мне было интересно, есть ли в любом случае программа, которая может в значительной степени автоматически определять dll с более поздней версией и просто отбрасывать старую и загружать новую без необходимости выключения.

Ответы [ 3 ]

4 голосов
/ 23 октября 2009

Этого может быть трудно достичь в приложении .Net. После того, как DLL загружена в определенный домен приложений, выгрузить DLL из домена приложений невозможно. Единственный способ вывести DLL из процесса - это выгрузить сам AppDomain.

Вы можете достичь того, чего пытаетесь достичь, загрузив DLL во вторичный домен приложений и перезапустив этот домен приложений с новой библиотекой DLL, когда вы обнаружите изменение. Это также включает в себя использование некоторых расширенных функций теневого копирования, чтобы позволить DLL быть удаленной во время использования процессом.

0 голосов
/ 23 октября 2009

Платформа Managed Extensibility позволит вам сделать это.

0 голосов
/ 23 октября 2009

Единственный способ сделать это - переместить код, который использует сборку, в свой собственный домен приложений. Вы можете закрыть AppDomain и перезапустить его с новой сборкой.

См. Этот вопрос: Как перезагрузить сборку в C # для домена приложения .NET?

...