Есть ли способ программно "перезагрузить" сборку .net? - PullRequest
2 голосов
/ 13 ноября 2008

Гипотетическая ситуация: допустим, у меня есть сторонняя сборка .net, используемая в веб-системе ASP.Net, над которой я сейчас работаю, просто время от времени происходит сбой. При этом все вызовы к нему выдают исключения до перезагрузки системы. Это, очевидно, немного неоптимально.

Есть ли способ перезагрузить только эту сборку из обработчика исключений?

(Приложение: конечно, правильный ответ здесь состоит в том, чтобы заставить поставщика исправить свою ошибку. Однако рассматриваемый поставщик несколько ... "неохотно" отвечает на наши электронные письма. Итак, пришла эта перезагрузка об этом утре как о кусочке клейкой ленты MacGyver-eqsue. А потом мы поняли, что никто из нас не знает, как это сделать.)

Ответы [ 6 ]

7 голосов
/ 14 ноября 2008

Вызов HttpRuntime.UnloadAppDomain () заставит приложение завершить себя и перезапустить при поступлении следующего веб-запроса. Это приводит к тому, что все перезагружается с нуля и должно удалять поврежденные данные сборки.

Конечно, это убьет все активные сеансы, но если приложение по сути все равно аварийно завершится, это, вероятно, приемлемо.

4 голосов
/ 13 ноября 2008

ОК, реальный ответ ... Когда файл Web.Config изменяется, приложение перекомпилируется и пул приложений сбрасывается.

Итак, (и мне неприятно это говорить) программно измените ваш файл web.config.

Кстати, я не рекомендую делать это, так что вы можете сохранить свой голос за кого-то еще.

4 голосов
/ 13 ноября 2008

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

2 голосов
/ 13 ноября 2008

Гипотетически ... вернитесь к стороннему поставщику и попросите его исправить ошибку.

0 голосов
/ 14 ноября 2008

Помимо изменения файла web.config, вы можете создать произвольный файл в папке bin. Это перезапустит ваше приложение.

0 голосов
/ 13 ноября 2008

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

...