В настоящее время я работаю над хобби-проектом .NET, который включает в себя сложную систему объектов, которые работают в сочетании друг с другом. Однако я столкнулся с небольшой проблемой: я не могу найти механизм в .NET для поддержки замены кода во время выполнения и возможности избавиться от старого кода, загруженного ранее. Это означает динамическую замену модуля/объекта и почти мгновенное отображение изменений пользователю, например, когда он перезапускает процедуру, а не всю программу.
Я уже учел возможность иметь отдельный AppDomain
для каждой сессии и загружать в него нужные сборки, но это кажется слишком дорого. Я также должен упомянуть, что каждый сеанс выигрывает от общей базы сборок, например, для подключения к базе данных, поэтому это означает загрузку этих классов в каждый отдельный сеанс. Маршаллинг данных туда и обратно из отдельного AppDomain
также представляет собой дополнительные накладные расходы (могут использоваться, когда данные отправляются в клиентское приложение по сети, код для этого содержится в основном AppDomain
, который управляет сеансами).
Есть ли структура или способ замены/выгрузки определенных частей кода? Как это делается в реальных приложениях? Может ли быть обходной путь? Или я выбрал не тот набор инструментов?