На основании этого может показаться, что управляемые dll не являются действительно "загруженными" в том смысле, что они находятся в обычной структуре. Вместо этого IL сопоставляется с памятью, и JIT просто захватывает то, что ему нужно, по мере продвижения (без необходимости поддерживать загрузку памяти для кода, который был выполнен, но больше не используется)
Это объясняет, почему CF не позволяет перебирать загруженные библиотеки DLL. Что касается того, почему он не позволяет выполнять итерации по ссылочным dll , которые являются полностью компоновкой времени ...
Как возможное обходное решение:
Используйте GetExecutingAssembly , чтобы получить активный код. Убедитесь, что это происходит в вашем исполняемом файле, чтобы получить корневую сборку.
Напишите некоторый код, способный анализировать dll для манифеста, указывающий, на какие сборки ссылаются (это не обязательно должен быть управляемый код - API-интерфейс неуправляемого самоанализа, предоставляемый Microsoft, может даже сделать это для вас, а спецификация формата dll является общедоступной и маловероятной коренным образом измениться в ближайшее время). Я предлагаю черный список DLL, загруженных из GAC (хотя это может быть ненужным).