2013-08-19 3 views
0

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

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

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

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

+0

[ildasm.exe] (http://msdn.microsoft.com/en-us/library/f7dy01k1.aspx) сделает это за вас. –

+0

Вы имеете в виду программно? – cvillalobosm

ответ

1
+0

Да, я уже пытался использовать Reflection, но он не работает полностью. – cvillalobosm

+0

Можете ли вы поделиться кодом, который используете? – meilke

+0

На самом деле я не могу. Мне не разрешено это делать. Процесс ищет DLL в папке bin текущего запущенного приложения, а не в пути ссылочной сборки загруженной DLL. Он загружает мелкие сборки .Net. – cvillalobosm

1

ли вам нужно dependency graph, dependency matrix или если вам нужны эти сборки зависимости программна NDepend может сделать это за вас.

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

Для получения программных зависимостей сборок вам необходимо использовать NDepend.API. Вот документация NDepend.API getting started. После того, как вы получили 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 < IAssembly>, который содержит приложение и сторонние сборки. Для сдерживания a.AssembliesUsed только к используемым сборкам приложений вы можете переписать его assembliesUsed = a.AssembliesUsed.Where(a1 => !a1.IsThirdParty).

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

Assemblies dependencies with NDepend