Я использую пользовательский каркас, который использует отражение, чтобы сделать GetTypeByName(string fullName)
для полного имени типа, получаемого из базы данных, чтобы создать экземпляр указанного типа и добавить его на страницу, в результате чего стандартные модульные вещи.
GetTypeByName
- моя служебная функция, которая просто перебирает Thread.GetDomain().GetAssemblies()
, а затем выполняет assembly.GetType(fullName)
, чтобы найти соответствующий тип. Очевидно, этот результат кэшируется для дальнейшего использования и скорости.
Однако у меня возникают некоторые проблемы, из-за которых при обновлении файла web.config (и, в некоторых более редких случаях, если пул приложений перезапускается), он теряет все знания об определенных сборках, что приводит к невозможности визуализации экземпляр типа модуля. Отладка показывает, что отсутствующая сборка буквально не существует в текущем списке сборок потока.
Чтобы обойти это, я добавил вторую проверку, которая немного грязная, но повторяется через DLL-каталог / bin / и проверяет, что каждая из них существует в списке сборок. Если это не так, он загружает его с помощью Assembly.Load и исправляет проблему с контекстом благодаря «Решение проблемы с контекстом загрузки сборки» .
Это будет работать, только кажется, что (и я знаю, что это не должно быть возможно), некоторые проекты по-прежнему имеют доступ к отсутствующей сборке, например, мой настоящий веб-проект, а не сам фреймворк, и затем он жалуется что дубликаты ссылок были добавлены!
Кто-нибудь когда-нибудь слышал о чем-либо подобном или у кого-нибудь есть идеи, почему сборка просто перестает существовать при изменении конфигурации? Если не считать решения, какой самый элегантный обходной путь для перезагрузки всех сборок в корзине? Это должно быть все в одном «хите», чтобы посетители сайта не видели никакой разницы, кроме небольшой задержки, поэтому файл app_offline.htm исключен. Программное переименование DLL в корзине и последующее присвоение ей имени работает, но требует разрешения «изменить» для учетной записи пользователя IIS, что безумие.
Спасибо за любые советы, которые может собрать сообщество!