Как я могу выполнить восстановление nuget, используя встроенный поставщик PackageManagement для NuGet? - PullRequest
0 голосов
/ 22 октября 2018

(У меня сильное чувство, что здесь есть что-то фундаментальное, чего я не понимаю, поэтому, пожалуйста, потерпите меня ...)

У меня есть фид Local NuGet на сетевой папке, в которой есть несколько пакетови у меня есть файл User NuGet.Config, который указывает на эту сетевую папку как источник пакета.В папке проекта (git-репозиторий) у меня есть файл packages.config, который ссылается на пакет из этого локального канала по имени.Я хочу восстановить этот пакет в этой папке проекта.

Мне кажется, что это затрудняет то, что это не проект Visual Studio.Я работаю с ним в обычном текстовом редакторе и у меня есть несколько сценариев сборки PowerShell.

Я знаю, что могу просто загрузить двоичный файл nuget.exe и поместить его в свой путь или рабочий каталог, а затем выполнить nuget restoreиз командной строки, но проблема, которую я пытаюсь решить, скорее философская чистота.А именно:

  • Мой репозиторий должен быть переносимым, с минимумом обязательных зависимостей
  • Мой репозиторий не должен содержать посторонних двоичных файлов или кода, которым он не владеет

Поэтому я не могу зафиксировать двоичный файл nuget.exe в своем хранилище, чтобы сделать его переносимым;вместо этого я хочу полагаться на обязательную зависимость «современной среды Windows 10», которая предоставляет мне PowerShell и встроенные инструменты PackageManagement, которые позволяют загружать различных поставщиков, включая PowerShellGet и NuGet.

Это похоже на правильный путь, поскольку PackageManagement разработан как встроенный унифицированный интерфейс для любого решения по управлению пакетами.(Но я неправильно понимаю это, и это на самом деле предназначено только для установки программного обеспечения в вашу операционную систему или учетную запись пользователя? Я не могу найти ничего, что четко очерчивает это.)

Итак, возможно лииспользовать встроенное PackageManagement для создания nuget restore (или его эквивалента) из файла packages.config, выходящего за рамки Visual Studio?Или, если не напрямую, существует ли очевидное / простое решение для начальной загрузки из PackageManagement к чему-то, что может выполнить такое восстановление?

1 Ответ

0 голосов
/ 22 октября 2018

Вы можете черпать вдохновение из репо NuGet.Client команды команды NuGet, где у них есть сценарий powershell configure.ps1 , который устанавливает репозиторий для разработки / сборки, и он вызываетдва пользовательских командлета Install-NuGet (загрузка nuget.exe из фиксированного источника HTTP), а затем Restore-SolutionPackages (восстановление файла packages.config), оба определены в файле common.ps1 .

Итак, у вас может быть скрипт powershell, который загружает nuget.exe и запускает восстановление.Это означает, что после клонирования репо (а иногда и после извлечения) у разработчика есть дополнительные ручные действия, которые необходимо выполнить, прежде чем решение будет построено с помощью Visual Studio.Но если команда NuGet делает то же самое, это, наверное, не так уж и ужасно, верно?По крайней мере, есть прецедент, на который вы можете указать.

Если разработчики вручную запускают сценарий, чтобы сделать это, для вас проблема, вы можете исследовать пользовательские цели MSBuild (либо включить его из соответствующих файлов csproj, либо просто создать Directory.Build.targets file ) и заставьте MSBuild сделать это при создании решения.Однако вы, вероятно, захотите потратить время на то, чтобы убедиться, что добавочные сборки настроены правильно для ваших пользовательских целей, в противном случае это замедлит время сборки.

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