РЕДАКТИРОВАТЬ
Как описано в вашем последующем комментарии, вам нужны только те сборки, которые ваш код использует напрямую.
GetReferencedAssemblies
будет делать это.
Как описано в ваших комментариях, вы пытаетесь решить проблему остановки.
Вы не можете надежно сделать это, фактически не выполняя исходную сборку (и не используя API профилирования, чтобы увидетькакой тип он использует).
Вы можете рекурсивно вызвать GetReferencedAssemblies
для каждой ссылки и получить все дерево косвенных зависимостей.
РЕДАКТИРОВАТЬ :
Например:
static IEnumerable<Assembly> (Assembly a) {
return a.GetReferencedAssemblies()
.Concat(a.GetReferencedAssemblies()
.SelectMany<Assembly, Assembly>(GetAllReferences)
);
Однако вы можете получить ложные срабатывания, если одна из ссылок использует сборку в кодепуть, который недоступен исходной сборке.Из-за интерфейсов и полиморфизма очень трудно отсеять такие ложные срабатывания.Если какой-либо код в любом доступном пути кода использует отражение, это невозможно по определению.