Как выгрузить .NET AppDomain по умолчанию из неуправляемого приложения - PullRequest
1 голос
/ 25 февраля 2010

Есть ли способ выгрузить домен по умолчанию .NET AppDomain из неуправляемого приложения?

Я использую сторонний инструмент под названием .NET Extender для использования сборок .NET из Visual FoxPro, который позволяет мне размещать элементы управления .NET, а также использовать классы и методы .NET изнутри. среда FoxPro.

Проблема, с которой я столкнулся, заключается в том, что при отладке приложения из Visual FoxPro оно запускает все содержимое основного файла приложения vfp9.exe для IDE, и кажется, что дескрипторы моих управляемых сборок не освобождаются. Поэтому, когда я изменяю эти сборки .NET и хочу обновить их, мне нужно закрыть VFP IDE и снова открыть его, в противном случае я получаю нарушение совместного доступа при попытке перезаписать файлы.

Я начал искать способы обеспечения удаления элементов управления, но потом наткнулся на эту статью Рика Стрэла , где он в основном описывает, что проблема в том, что основной AppDomain не выгружен. Изучив информацию о том, как выгрузить домен приложения по умолчанию, я пришел к выводу, что это невозможно, по крайней мере, из управляемого приложения, но возможно ли для неуправляемого приложения. Я думаю, что только из-за того, что неуправляемое приложение использует ресурс .NET, оно не должно продолжать перевозить багаж домена приложений и среды выполнения.

1 Ответ

2 голосов
/ 25 марта 2010

На этот вопрос ответили на форумах MSDN , и, к сожалению, кажется, что это невозможно и что процесс должен быть прекращен для освобождения ресурсов, включая домены приложений. Это описано в документации для метода интерфейса ICLRRuntimeHost.Stop , в котором говорится: «Этот метод не освобождает ресурсы для хоста, не выгружает домены приложений и не уничтожает потоки. Для освобождения этих ресурсов необходимо завершить процесс . "

...