Решение зависит от вашего конкретного случая.Но нет прямого решения, потому что вы не можете обновить сборки, пока они загружены в память и используются.Я могу предложить 2 решения: использовать теневое копирование и использовать некоторый вспомогательный исполняемый файл.Я использовал оба из них.
Теневое копирование.
Очевидный способ - сделать основной исполняемый файл для теневого копирования, заменить его во время работы приложения.а затем перезапустите приложение.Но вы не можете сделать домен приложения по умолчанию теневым копированием, могут быть только вторичные домены приложений.Но вы все равно можете переместить весь свой код в другую сборку (скажем, MainAppLib.dll) и переписать исполняемый файл основного приложения (MainApp.exe), чтобы он содержал только «код загрузчика».Этот код загрузчика должен создать другой домен приложения, установить его для теневого копирования и затем запустить логику вашей программы в дополнительном домене приложения.Не допускайте прямых ссылок из основного домена приложения на MainAppLib.dll, потому что тогда эта сборка будет загружена в основной домен приложения, который не является теневым копированием, и файл сборки будет заблокирован.В большинстве случаев вы можете использовать методы AppDomain.ExecuteAssembly () .
Исполняемый файл-помощник
Идея состоит в том, чтобы использовать какой-то Обновление финишера .Ваше основное приложение остается неизменным, вы просто добавляете в него небольшое количество кода, чтобы ваше приложение загрузило обновление, поместило его во временную папку, а затем ваше основное приложение запустило окончание обновления ( в отдельном процессе )и выходит.Финишер обновления ждет, пока ваше приложение закроется, а затем копирует новые файлы из временной папки в папку приложения, заменяя все файлы.Финишер обновлений не может заменить собственный исполняемый файл, но это может быть сделано основным приложением до того, как он запустит финишер обновлений.После копирования файлов обновление завершает работу вашего приложения.
ps Лично я предпочитаю первое решение, потому что оно включает в себя магию вуду с использованием доменов приложений, отражений, сборок и т. Д. И его можно развить виспользуя плагины, если вам нужно (например, через MEF framework ).Но последнее легче понять, особенно если вы никогда не работали с доменами приложений и загрузкой сборок вручную, это довольно просто.