# NuGet Downloader Утилита для скачивания NuGet пакетов вместе с их зависимостями в одну папку. ## 🎯 Цель Заменить сложную цепочку команд: ```bash alias wnuget="mono /home/tactile/dev/dotnet/test-nuget-download/bin/nuget.exe" wnuget install Npgsql -OutputDirectory "./pg-cache" -Framework netstandard2.0 find ./pg-cache -name "*.nupkg" -exec cp --parents -v {} ./pg-nuget-packages/ \; ``` На простую команду: ```bash ./nuget-download.sh Npgsql netstandard2.0 ./pg-nuget-packages ``` ## Возможности - ✅ Скачивание пакета с указанием версии или последней стабильной - ✅ Выбор целевого framework (netstandard2.0, net6.0, net8.0 и др.) - ✅ Автоматическое скачивание всех зависимостей - ✅ Сохранение всех пакетов в одну папку - ✅ Поддержка различных источников NuGet - ✅ Интерактивный режим (запрос параметров) - ✅ Удобный bash скрипт с поддержкой версий ## Сборка ```bash dotnet build ``` ## Использование ### Через скрипт (рекомендуется) ```bash # Базовое использование ./nuget-download.sh Npgsql # С указанием framework ./nuget-download.sh Npgsql netstandard2.0 # С указанием папки назначения ./nuget-download.sh Npgsql netstandard2.0 ./my-packages # С указанием версии ./nuget-download.sh Npgsql netstandard2.0 ./my-packages 7.0.6 # Интерактивный режим (запуск без параметров) ./nuget-download.sh # Справка ./nuget-download.sh --help ``` ### Через dotnet run ```bash # Базовое использование dotnet run -- --package-id Npgsql --framework netstandard2.0 # С указанием версии dotnet run -- --package-id Npgsql --version 7.0.6 --framework netstandard2.0 # С указанием папки назначения dotnet run -- --package-id Npgsql --framework netstandard2.0 --output-dir ./my-packages # Полный пример dotnet run -- \ --package-id Npgsql \ --version 7.0.6 \ --framework netstandard2.0 \ --output-dir ./pg-nuget-packages \ --source https://api.nuget.org/v3/index.json ``` ## Параметры ### Для скрипта `nuget-download.sh`: - `package-id` - ID пакета для скачивания (обязательный) - `framework` - Целевой framework (по умолчанию netstandard2.0) - `output-dir` - Папка для сохранения пакетов (по умолчанию ./nuget-packages) - `version` - Версия пакета (по умолчанию последняя стабильная) ### Для `dotnet run`: - `--package-id` - ID пакета для скачивания (обязательный) - `--version` - Версия пакета (по умолчанию последняя стабильная) - `--framework` - Целевой framework (по умолчанию netstandard2.0) - `--output-dir` - Папка для сохранения пакетов (по умолчанию ./nuget-packages) - `--source` - Источник NuGet (по умолчанию https://api.nuget.org/v3/index.json) ## Примеры frameworks - `netstandard2.0` - .NET Standard 2.0 - `net6.0` - .NET 6 - `net8.0` - .NET 8 - `net472` - .NET Framework 4.7.2 ## Сравнение с вашим предыдущим подходом **Старый подход:** ```bash alias wnuget="mono /home/tactile/dev/dotnet/test-nuget-download/bin/nuget.exe" wnuget install Npgsql -OutputDirectory "./pg-cache" -Framework netstandard2.0 find ./pg-cache -name "*.nupkg" -exec cp --parents -v {} ./pg-nuget-packages/ \; ``` **Новый подход:** ```bash # Через скрипт (проще) ./nuget-download.sh Npgsql netstandard2.0 ./pg-nuget-packages # Или через dotnet run dotnet run -- --package-id Npgsql --framework netstandard2.0 --output-dir ./pg-nuget-packages ``` ## Преимущества новой утилиты 1. **Одна команда** - вместо цепочки команд 2. **Автоматическое разрешение зависимостей** - не нужно вручную копировать файлы 3. **Выбор framework** - встроенная поддержка 4. **Гибкость** - легко добавить новые возможности 5. **Кроссплатформенность** - работает на Windows, Linux, macOS 6. **Современный .NET** - использует последние версии библиотек NuGet 7. **Простота использования** - удобный bash скрипт 8. **Подробный вывод** - показывает процесс скачивания и зависимости ## Примеры работы ### Скачивание пакета без зависимостей ```bash ./nuget-download.sh Npgsql netstandard2.0 # Результат: 1 файл Npgsql.9.0.3.nupkg ``` ### Скачивание пакета с зависимостями ```bash ./nuget-download.sh System.Text.Json netstandard2.0 # Результат: 10 файлов включая все зависимости ``` ## Структура проекта ``` ├── Program.cs # Основной код утилиты ├── NuGetDownloader.csproj # Файл проекта .NET ├── nuget-download.sh # Bash скрипт с интерактивным режимом ├── README.md # Документация └── [папки с результатами] # Скачанные пакеты ``` ## 🆕 Последние улучшения ### ✅ Добавлена поддержка версий Теперь можно указать конкретную версию пакета: ```bash ./nuget-download.sh Npgsql netstandard2.0 ./my-packages 7.0.6 ``` ### ✅ Добавлен интерактивный режим При запуске без параметров скрипт запрашивает все необходимые данные: ```bash ./nuget-download.sh # Введите ID пакета: Npgsql # Введите framework [netstandard2.0]: # Введите папку назначения [./nuget-packages]: # Введите версию (пусто для последней стабильной): 7.0.6 ``` ## ✅ Готово! Утилита полностью готова к использованию. Она успешно заменяет вашу предыдущую цепочку команд и предоставляет дополнительные возможности: - ✅ Автоматическое скачивание зависимостей - ✅ Выбор framework - ✅ Удобный bash скрипт с поддержкой версий - ✅ Интерактивный режим (запрос параметров) - ✅ Подробный вывод процесса - ✅ Кроссплатформенность - ✅ Современный .NET 8 - ✅ Указание конкретной версии пакета ### Быстрый старт ```bash # Скачать Npgsql с зависимостями ./nuget-download.sh Npgsql netstandard2.0 ./my-packages # Скачать System.Text.Json (много зависимостей) ./nuget-download.sh System.Text.Json netstandard2.0 ./json-packages # Скачать конкретную версию Npgsql ./nuget-download.sh Npgsql netstandard2.0 ./my-packages 7.0.6 # Интерактивный режим ./nuget-download.sh ```