Получить зависимости DLL или EXE, используя NDepend

Мне нужно получить список ссылочных сборок, используемых в файле EXE или DLL. Я искал NDepend как вариант сделать это через консоль, чтобы у меня было программное решение для этого.

Насколько мне известно, NDepend считывает зависимости из проекта Visual Studio, но я не знаю, можно ли заставить NDepend анализировать DLL и считывать связанные с ней сборки.

Кто-нибудь знает, возможно ли это сделать с помощью NDepend? Если нет, есть ли другой инструмент или механизм, который я могу использовать для достижения этой цели?

Спасибо, дайте мне знать, если вам нужна дополнительная информация.


person cvillalobosm    schedule 19.08.2013    source источник
comment
ildasm.exe сделает это за вас.   -  person Matthew Watson    schedule 19.08.2013
comment
Вы имеете в виду программно?   -  person cvillalobosm    schedule 19.08.2013


Ответы (2)


person meilke    schedule 19.08.2013
comment
Да, я уже пытался использовать Reflection, но он работает не совсем хорошо. - person cvillalobosm; 20.08.2013
comment
На самом деле я не могу. Мне не разрешено это делать. Процесс ищет DLL в папке bin текущего работающего приложения, а не в пути эталонной сборки загруженной DLL. Он отлично загружает сборки, на которые ссылаются .Net. - person cvillalobosm; 20.08.2013
comment
Извините, но я не совсем понимаю, что вы пытаетесь сделать. Можете ли вы объяснить еще кое-что? Вы различаете управляемые и неуправляемые ссылки? - person meilke; 20.08.2013
comment
Да, это не должно бороться с неуправляемыми ссылками. У меня есть приложение, в которое я могу загрузить файл DLL или EXE, мне нужно, чтобы приложение получало указанные сборки. Я уже пробовал с Reflection, но он не работает нормально, потому что, когда он достигает ссылки на приложение, он пытается загрузить DLL из текущей папки bin приложения, вместо этого загружая сборку из правильного пути сборки. - person cvillalobosm; 20.08.2013
comment
Я скорректировал свой ответ. Dependency Walker всегда мое последнее средство. - person meilke; 20.08.2013

Нужен ли вам граф зависимости, матрица зависимостей или, если вам нужны эти сборки, зависимости программно NDepend может сделать это за вас.

поэтому у меня может быть программное решение для этого.

Чтобы программно получить зависимости сборок, вам нужно использовать NDepend.API. Вот документация по началу работы с NDepend.API. Получив объект ICodeBase в памяти, вот как получить зависимости сборок, например, с помощью запроса C# LINQ:

from a in codeBase.Application.Assemblies 
where a.AssembliesUsed.Count() >= 0 
orderby a.AssembliesUsed.Count() descending 
select new { 
   a,
   a.AssembliesUsed,
   a.AssembliesUsingMe
}

Обратите внимание, что a.AssembliesUsed — это IEnumerable‹IAassembly>, который содержит приложения и сторонние сборки. Чтобы ограничить a.AssembliesUsed только используемыми сборками приложений, вы можете переписать его assembliesUsed = a.AssembliesUsed.Where(a1 => !a1.IsThirdParty).

Кроме того, поскольку NDepend API можно использовать из запроса C# LINQ, скомпилированного и выполненного «на лету», вы можете запустить предыдущий запрос C# LINQ в редакторе запросов NDepend в Visual Studio и получить зависимости сборок в удобном формате:

Зависимости сборок с помощью NDepend

person Patrick from NDepend team    schedule 20.08.2013