Почему некоторые сборки .Net недоступны с помощью метода GetAssemblies () в AppDomain? - PullRequest
2 голосов
/ 10 сентября 2009

У меня есть небольшой код, который просматривает типы, загруженные в данный момент в домен приложений, который работает в приложении ASP.NET. Вот как я получаю сборки:

var assemblies = AppDomain.CurrentDomain.GetAssemblies();

При первом запуске приложения проблем нет, и присутствуют все ожидаемые типы. Но когда я обновляю Web.config или уничтожаю процесс w3p.exe (или процесс по какой-либо причине перезапускается), доступны только некоторые из ожидаемых типов. Когда я перехожу через отладчик, я замечаю, что некоторые сборки из частного пути поиска (каталог bin моего приложения) не были загружены. Я предполагал, что все сборки были загружены при запуске приложения и перезапуске независимо от того, требовались они немедленно или нет. Но в случае перезапуска этого, похоже, не происходит , если эти файлы сборки не были обновлены.

Что мне требуется, так это собрать информацию о типе при запуске для последующего использования. Но поскольку во время перезапуска типы недоступны, он пахнет позже, когда необходимо использовать информацию о типе. Итак, имея в виду, как я могу решить или обойти этот недостаток?

Ответы [ 3 ]

4 голосов
/ 10 сентября 2009

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

3 голосов
/ 11 сентября 2009

Вы можете использовать

AssemblyName[] assemblies = Assembly.GetCallingAssembly().GetReferencedAssemblies();

Таким образом, вы получаете все сборки, на которые есть ссылки из сборки, из которой вы вызываете этот метод.

2 голосов
/ 10 сентября 2009

Как часть запуска, вы можете явно загрузить сборки, которые вас интересуют?

Вы должны заранее знать, какие сборки вам понадобятся.

Сканирование файловой системы, чтобы определить, какие сборки были поставлены вместе с вашим приложением, может быть полезной идеей, но это не поможет для загруженных сборок GAC ...

...