Получить список всех прямых и косвенных зависимостей проекта от MSBuild - PullRequest
0 голосов
/ 14 июня 2019

Фон

У меня есть огромное приложение, которое разбито на десятки (сотни?) Небольших проектов на C #. Чтобы построить его, я просто вызываю

msbuild my_root_project.csproj

поскольку корневой проект просто импортирует все необходимые подпроекты (которые могут импортировать другие подпроекты, которые могут импортировать другие подпроекты, ...). Это прекрасно работает, так как MSBuild обходит все зависимости и строит их одну за другой. В результате у меня в папке с выходными данными сборки (например, отладка) есть куча dll.

Дополнительная информация

Здесь важно то, что это довольно старый проект, пришедший со времен до NuGet. Так что нет ничего лучше, чем отдельный файл со сводкой всех внешних зависимостей. Вместо этого у меня есть все внешние двоичные файлы, которые хранятся в папке «ext_libs» следующим образом:

root
|-> src
    |-> CsProject1
    |-> CsProject2
    ....
    |-> YetAnotherCsProject
    ....
    |-> MyRootProject
    ....
|-> ext_libs
    |-> Newtonsoft.Json 
        |-> ... dlls
    |-> SevenZip (same here)
        |-> ... dlls
    |->  ...

На эти внешние двоичные файлы можно ссылаться в любом из CsProjects. Более того, даже возможно, что одна и та же библиотека импортируется несколькими подпроектами, используемыми моим корневым проектом (например, многие из них используют Newtonsoft.Json).

Задача

Мне нужно получить точный список всех библиотек из папки ext_libs, которая используется моим корневым проектом или любым из его зависимых проектов.

Я посмотрел журналы вывода MSBuild и заметил, что он выдает такие сообщения:

Building project XYZ.csproj /reference:ext_libs/lib1.dll /reference:ext_libs/lib2.dll ...
...
...
Building project ABC.csproj /reference:ext_libs/lib5.dll /reference:ext_libs/lib23.dll
...

Поскольку MSBuild оказывается способным обходить все зависимости и разрешать все зависимости одну за другой. Интересно, можно ли как-то проинструктировать сделать что-то вроде:

msbuild /dontBuild /listReferences

В качестве альтернативы я мог бы просто просмотреть все файлы csproj вручную, но, очевидно, я бы предпочел использовать существующие инструменты вместо создания пользовательских.

Дополнительные ограничения

  • Почему-то я не могу просто проверить содержимое выходной папки, так что это не вариант.
  • Желательно .NET 4, но если проблема может быть легко решена в более поздней версии фреймворка ... хорошо - все равно рад услышать решение :)).

1 Ответ

1 голос
/ 20 июня 2019

Я написал инструмент, чтобы помочь в подобных ситуациях.https://github.com/chris1248/SolutionBuilder
Укажите на каталог, и он сгенерирует для вас файл решения, содержащий все файлы .csproj и .vcxproj.Он выдает файл .dgml, который вы можете открыть в Visual Studio и проверить зависимости вашего проекта в графическом формате.
Если он не выполняет именно то, что вы ищете, вы можете его разветвить и изменить в соответствии со своими требованиями.необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...