Есть ли способ использовать NDepend API для получения списка сборок и связанных с ними проектов?

В настоящее время я пытаюсь получить список сторонних поставщиков, поставляемых с каждым продуктом, и столкнулся с NDepend API. Основываясь на проведенном мной исследовании, кажется, что вы вводите файл решения, а на выходе появляется список библиотек DLL и EXE, связанных с этим решением. До сих пор я пробовал:

static void Main(string[] args)
{
    var ndependServicesProvider = new NDependServicesProvider();
    var projectManager = ndependServicesProvider.ProjectManager;
    var visualStudioManager = ndependServicesProvider.VisualStudioManager;
    var projPath = "C:\\code\\depot\\Captiva\\IA\\EIM\\_Trunk\\Src\\BuildInputAccel.Installers.sln";
    var sln = projPath.ToAbsoluteFilePath();
    var vsSlnOrProjFilePaths = new List<IAbsoluteFilePath> { sln };
    var assembliesFilePath = (from vsSlnOrProjFilePath in vsSlnOrProjFilePaths

                              from assembliesFilePathTmp in visualStudioManager.GetAssembliesFromVisualStudioSolutionOrProject(vsSlnOrProjFilePath)

                              select assembliesFilePathTmp).Distinct().ToArray();
    IProject project = projectManager.CreateTemporaryProject(assembliesFilePath, TemporaryProjectMode.Temporary);
    project.CodeToAnalyze.SetApplicationAssemblies(assembliesFilePath);
    projectManager.SaveProject(project);
    IAnalysisResult analysisResult = project.RunAnalysis();
    Console.Write(analysisResult.CodeBase);



}

И получили необработанное исключение типа «System.IO.FileNotFoundException» в mscorlib.dll.

Кто-нибудь знает, что я делаю неправильно здесь. Я просто хочу вывести список dll и exe, связанных с каждым проектом в решении. PS: я очень новичок в C #, поэтому извините, если это кажется тривиальным!


person jshaf    schedule 11.11.2016    source источник


Ответы (1)


На странице начала работы с NDepend API вы Я найду инструкции о том, что делать.

На самом деле можно использовать встроенную функцию Code Querying LINQ (CQLinq) для запроса активных сторонних сборок. ссылки и их использование.

1) со стартовой страницы NDepend > Анализ решения VS

2) выберите свое решение

3) запустить анализ

Затем вы можете просто отредактировать этот запрос кода:

from a in ThirdParty.Assemblies
select new { a, a.AssembliesUsingMe }

и вуаля

NЗависит от запросов на использование сторонних сборок

Если некоторые сторонние сборки отсутствуют, это связано с тем, что они не были разрешены во время анализа. Просмотрите список ошибок анализа и обновите список папок, в которых NDepend будет искать сборки, в разделе «Свойства проекта NDepend» > «Код для анализа» > «Каталоги».

NЗависимые папки свойств проекта, содержащие сборки

person Patrick from NDepend team    schedule 14.11.2016
comment
это здорово спасибо! У меня все еще возникают проблемы с ошибкой «System.IO.FileNotFoundException» в mscorlib.dll при попытке создать проект Ndepend программным путем. Вы знаете, почему это может происходить? - person jshaf; 15.11.2016
comment
Я выполнил все шаги из раздела «Начало работы» в NDepend API. - person jshaf; 15.11.2016
comment
не могли бы вы перепроверить этот шаг, все сборки NDepend должны присутствовать в $NDependInstallPath$\ и $NDependInstallPath$\Lib. NDepend.API.dll фактически зависит от всех других сборок NDepend, поэтому они должны быть развернуты вместе с ним. - person Patrick from NDepend team; 16.11.2016
comment
После обновления я получил NDependDeveloperProLicense.xml. Куда мне поместить этот файл, чтобы я мог запускать анализ программно. Я продолжаю получать эту повторяющуюся ошибку: в NDepend.Analysis.dll произошло необработанное исключение типа «System.Exception». Дополнительная информация: Невозможно запустить анализ без лицензии Build Machine. - person jshaf; 30.11.2016
comment
не Невозможно запустить анализ без лицензии Build Machine? вам нужна лицензия Build Machine для запуска анализа с помощью NDepend.API ndepend.com/editions - person Patrick from NDepend team; 02.12.2016
comment
это очень объясняет. Глупый вопрос, который легко исправить. Спасибо за помощь! - person jshaf; 02.12.2016