Ответ 1
Обратите внимание, что 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
, а затем, по существу, продолжить, как описано выше, для перечисления типов, которые живут в этой загруженной сборке.