Что должно произойти при удалении ссылки? - PullRequest
1 голос
/ 12 марта 2010

У меня есть приложение vb.net 3.5, которое ссылается на dll (abc.dll, также в .net 3.5) Эта dll доступна приложению время от времени. Если в любое время во время выполнения, если я удалю DLL, я ожидаю, что приложение выдаст ошибку в следующий раз, когда оно попытается использовать класс из DLL. Но это не то поведение, которое я вижу. Если я удаляю dll перед запуском, приложение выдает ошибку при запуске. Но не когда dll удаляется после запуска.

Это стандартное поведение, или я что-то не так делаю? Могу ли я заставить приложение выдать ошибку, если dll не найдена, когда он пытается использовать свои классы?

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 12 марта 2010

Короткий ответ нет.После загрузки DLL она загружается до тех пор, пока экземпляры приложения AppDomain, использующие эту DLL, не будут выгружены из процесса.Только тогда вы можете удалить оригинальную DLL.

Более длинный ответ:

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

  • Прямая загрузка с диска.Об этом я знаю меньше всего, но в этом случае CLR может блокировать файл на сборке, и, следовательно, его можно удалить вообще
  • Загрузка из теневого каталога.В этом случае DLL фактически загружается из другого каталога на диске, что позволяет выполнять такие операции, как удаление исходной DLL.Это популярно в сценариях веб-приложений.В этом случае удаление исходной DLL не имеет смысла, так как важная DLL загружается из временного каталога sort.s
0 голосов
/ 12 марта 2010

Ошибка всегда возникает в тот момент, когда .NET Framework пытается загрузить сборку, на которую вы ссылаетесь. Похоже, по какой-то причине CLR решила загрузить сборку при запуске вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...