Я не знаю каких-либо инструментов, которые бы делали это автоматически для вас, но я могу наметить шаги, которые должен был бы выполнить любой инструмент (или вы).
Каждая сборка содержит манифест. В манифесте перечислены имена и версии всех других сборок, от которых зависит текущая сборка. В самом простом случае вам нужно будет следовать этому пути рекурсивно.
Нет правильного способа сообщить вам имена файлов ссылочных сборок. Ссылки хранятся в манифесте как имена сборок (имя, версия, культура и т. Д.), А не как имена файлов. Когда среде выполнения .NET требуется загрузить сборку, на которую ссылаются, она использует различные поиски, чтобы найти ее, и результат этих поисков может варьироваться от среды к среде. Конечно, это не может быть проблемой для вас, например, если вы просто ищете сборки на своей машине для разработки.
Методы разрешения ссылок на сборки включают поиск любых уже загруженных сборок, поиск в глобальном кэше сборок, поиск в каталоге приложения, перенаправление на основе файлов конфигурации приложения или политик издателя и другие. Google для статьи "Как среда выполнения находит сборки" в MSDN для более подробной информации. Кроме того, ваше приложение может зарегистрироваться, чтобы выполнить собственное эталонное разрешение, обработав событие System :: AppDomain :: AssemblyResolve.