Автор: Марюнин Никита Викторович
Разработан инструмент визуализации графа зависимостей для менеджера пакетов. Особенность проекта - самостоятельная реализация анализа зависимостей без использования готовых менеджеров пакетов или библиотек.
CLI-приложение анализирует зависимости пакетов .NET (NuGet) и строит полный граф зависимостей с учетом транзитивности, фильтрации и обработки циклических зависимостей.
- Загрузка конфигурации из INI-файла
- Валидация параметров с обработкой ошибок
- Преобразование типов данных (string, int, bool)
- Получение зависимостей из NuGet репозитория
- Парсинг .nuspec файлов в формате XML
- Два режима работы - реальный и тестовый
- Построение графа зависимостей алгоритмом BFS с рекурсией
- Фильтрация пакетов по подстроке
- Обработка циклических зависимостей
- Ограничение глубины анализа
- Визуализация древовидной структуры графа
- Порядок загрузки зависимостей с топологической сортировкой
- Сравнение с реальным менеджером пакетов
Обязательные параметры:
package_name(string) - Имя анализируемого пакетаrepository_url(string) - URL репозитория NuGettest_mode(boolean) - Режим работы с тестовыми данными (true/false)version(string) - Версия пакетаmax_depth(integer) - Максимальная глубина анализа зависимостейfilter(string) - Подстрока для фильтрации пакетов
Дополнительные параметры:
show_load_order(boolean) - Показывать порядок загрузки зависимостей (true/false)
Программа обрабатывает следующие ошибки:
- Отсутствие конфигурационного файла
- Неверный формат INI-файла
- Отсутствующие обязательные параметры
- Некорректные типы данных
- Пустые значения параметров
- Невалидные URL адреса репозиториев
- Ошибки сети при загрузке зависимостей
- Отсутствие интернет-соединения
- Циклические зависимости
run.bat
g++ -static -static-libgcc -static-libstdc++ -o build/DepViz.exe src/DepViz.cpp- Ctrl+Alt+N - сборка и запуск через Code Runner
- Ctrl+Shift+B - сборка через задачи VS Code
examples/config.ini (тестовый режим):
package_name = A
repository_url = https://api.nuget.org/v3/index.json
test_mode = true
version = 1.0
max_depth = 5
filter = E
show_load_order = trueВывод:
Enter configuration file name (e.g., ../examples/config.ini): ../examples/config.ini
=== Parameter Validation ===
+ Package name: A
+ Repository URL: https://api.nuget.org/v3/index.json
+ Test mode: enabled
+ Package version: 1.0
+ Max depth: 5
+ Filter: E
+ All parameters are valid
=== Building Dependency Graph ===
Starting from: A v1.0
Max depth: 5
Filter: 'E'
[FILTERED] E (contains 'E')
[FILTERED] E (contains 'E')
[FILTERED] E (contains 'E')
[FILTERED] E (contains 'E')
=== Dependency Graph for A ===
Total packages: 9
Graph structure:
================
A v1.0 [ROOT]
-> B v1.0
-> D v1.0
-> G v1.0
-> I v1.0
-> J v1.0
-> C v1.0
-> F v1.0
-> H v1.0
================
=== Dependency Load Order ===
Load order sequence:
1. J v1.0
2. I v1.0
3. G v1.0
4. D v1.0
5. B v1.0
6. H v1.0
7. F v1.0
8. C v1.0
9. A v1.0
=== Comparison with Real Package Manager ===
Real package manager differences:
+ Version conflict resolution
+ Parallel download optimization
+ Cached packages handling
+ Semantic versioning rules
Example real manager order for package A:
1. B v1.0 and C v1.0 (parallel)
2. D v1.0, E v1.0, F v1.0 (parallel)
3. G v1.0, H v1.0 (parallel)
4. I v1.0
5. J v1.0
6. A v1.0 (after all dependencies)
Press any key to continue . . .
examples/configReal.ini (реальный режим):
package_name = Microsoft.Extensions.Logging
repository_url = https://api.nuget.org/v3/index.json
test_mode = false
version = 10.0.0-rc.2.25502.107
max_depth = 5
filter = Microsoft
show_load_order = trueВывод:
Enter configuration file name (e.g., ../examples/config.ini): ../examples/configReal.ini
=== Parameter Validation ===
+ Package name: Microsoft.Extensions.Logging
+ Repository URL: https://api.nuget.org/v3/index.json
+ Test mode: disabled
+ Package version: 10.0.0-rc.2.25502.107
+ Max depth: 5
+ Filter: Microsoft
+ All parameters are valid
=== Building Dependency Graph ===
Starting from: Microsoft.Extensions.Logging v10.0.0-rc.2.25502.107
Max depth: 5
Filter: 'Microsoft'
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging/10.0.0-rc.2.25502.107/microsoft.extensions.logging.nuspec
Download successful - 6 dependencies
[FILTERED] Microsoft.Bcl.AsyncInterfaces (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.DependencyInjection (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.Logging.Abstractions (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.Options (contains 'Microsoft')
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/10.0.0-rc.2.25502.107/system.diagnostics.diagnosticsource.nuspec
Download successful - 2 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.memory/4.6.3/system.memory.nuspec
Download successful - 3 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.buffers/4.6.1/system.buffers.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.6.1/system.numerics.vectors.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.1.2/system.runtime.compilerservices.unsafe.nuspec
Download successful - no dependencies
[CYCLE] System.Runtime.CompilerServices.Unsafe v6.1.2
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.valuetuple/4.6.1/system.valuetuple.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging/10.0.0-rc.2.25502.107/microsoft.extensions.logging.nuspec
Download successful - 6 dependencies
[FILTERED] Microsoft.Bcl.AsyncInterfaces (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.DependencyInjection (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.Logging.Abstractions (contains 'Microsoft')
[FILTERED] Microsoft.Extensions.Options (contains 'Microsoft')
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/10.0.0-rc.2.25502.107/system.diagnostics.diagnosticsource.nuspec
Download successful - 2 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.memory/4.6.3/system.memory.nuspec
Download successful - 3 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.buffers/4.6.1/system.buffers.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.6.1/system.numerics.vectors.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.1.2/system.runtime.compilerservices.unsafe.nuspec
Download successful - no dependencies
[CYCLE] System.Runtime.CompilerServices.Unsafe v6.1.2
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.valuetuple/4.6.1/system.valuetuple.nuspec
Download successful - no dependencies
=== Dependency Graph for Microsoft.Extensions.Logging ===
Total packages: 7
Graph structure:
================
Microsoft.Extensions.Logging v10.0.0-rc.2.25502.107 [ROOT]
-> System.Diagnostics.DiagnosticSource v10.0.0-rc.2.25502.107
-> System.Memory v4.6.3
-> System.Buffers v4.6.1
-> System.Numerics.Vectors v4.6.1
-> System.Runtime.CompilerServices.Unsafe v6.1.2
-> System.ValueTuple v4.6.1
================
=== Dependency Load Order ===
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/microsoft.extensions.logging/10.0.0-rc.2.25502.107/microsoft.extensions.logging.nuspec
Download successful - 6 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/10.0.0-rc.2.25502.107/system.diagnostics.diagnosticsource.nuspec
Download successful - 2 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.memory/4.6.3/system.memory.nuspec
Download successful - 3 dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.buffers/4.6.1/system.buffers.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.6.1/system.numerics.vectors.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.1.2/system.runtime.compilerservices.unsafe.nuspec
Download successful - no dependencies
Downloading from NuGet...
URL: https://api.nuget.org/v3-flatcontainer/system.valuetuple/4.6.1/system.valuetuple.nuspec
Download successful - no dependencies
Load order sequence:
1. System.Buffers v4.6.1
2. System.Numerics.Vectors v4.6.1
3. System.Runtime.CompilerServices.Unsafe v6.1.2
4. System.Memory v4.6.3
5. System.Diagnostics.DiagnosticSource v10.0.0-rc.2.25502.107
6. System.ValueTuple v4.6.1
7. Microsoft.Extensions.Logging v10.0.0-rc.2.25502.107
=== Comparison with Real Package Manager ===
Real package manager differences:
+ Version conflict resolution
+ Parallel download optimization
+ Cached packages handling
+ Semantic versioning rules
Press any key to continue . . .
Эти и другие конфигурационные файлы вы можете найти в папке examples