Обратите внимание, что Assembly.GetReferencedAssemblies
включает только определенную сборку, если вы действительно используете тип в этой сборке в вашей сборке (или тип, который вы используете, зависит от типа в этой сборке). Недостаточно просто включить сборку в список ссылок в Visual Studio. Может быть, это объясняет разницу в результатах от того, что вы ожидаете? Я отмечаю, что если вы ожидаете, что сможете получить все сборки, которые есть в списке ссылок в Visual Studio, с помощью отражения, что невозможно; метаданные для сборки не содержат никакой информации о сборках, от которых данная сборка не зависит.
Тем не менее, после того, как вы получите список всех ссылочных сборок, что-то вроде следующего должно позволить вам перечислить все типы в этих сборках:
foreach (var assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) {
Assembly assembly = Assembly.Load(assemblyName);
foreach (var type in assembly.GetTypes()) {
Console.WriteLine(type.Name);
}
}
Если вам нужны сборки, на которые есть ссылки в Visual Studio, вам придется проанализировать файл csproj
. Для этого проверьте элемент ItemGroup
, содержащий Reference
элементов.
Наконец, если вы знаете, где находится сборка, вы можете загрузить ее, используя Assembly.LoadFile
, а затем, по существу, продолжить, как указано выше, для перечисления типов, которые живут в этой загруженной сборке.