Есть ли способ «установить» пакет nuget, как это делает Visual Studio, но на сервере развертывания - PullRequest
0 голосов
/ 28 мая 2020

Фон:

Я достаточно новичок в упаковке и публикации nuget. Короче говоря, у меня есть проект C# (назовем его проектом MYAPI), который зависит от множества других пакетов nuget. Некоторые потребители MYAPI рассчитывают ссылаться на него как на пакет nuget и самостоятельно заниматься развертыванием своих продуктов, в то время как некоторые другие потребители ожидают, что библиотеки DLL MYAPI будут установлены в определенные папки c, откуда они будут загружать их во время выполнения.

Итак, я упаковал MYAPI как nuget и опубликовал его на внутреннем сервере nuget.

Проблема:

Как мне установить пакет nuget на серверы таким образом, чтобы он имел все необходимые зависимости. Я хочу, чтобы он выглядел так, как выглядит папка bin\debug, т.е. на основе целевой платформы, скопируйте соответствующие файлы из всех пакетов зависимостей nuget, включая основной пакет nuget (в данном случае MYAPI)

Я знаю Я могу добиться этого, упаковав MYAPI в виде zip-файла или msi в дополнение к пакету nuget. Но мне не нужны несколько типов пакетов для MYAPI, и я предпочел бы придерживаться только пакета nuget. Я также понимаю, что могу сослаться на все зависимости в моем <files> разделе nuspe c, но я думаю, что это плохой способ сделать это.

Есть ли способ сделать это так же, как Visual Studio делает это, т.е. загружает основной пакет nuget и все его зависимости, извлекает их, а затем копирует соответствующие файлы (основанные на версии платформы) из всех извлеченных пакетов nuget в папку bin\debug. Если это недоступно из коробки, может ли кто-нибудь указать мне на «интеллект», который VS использует для копирования файлов в папку bin \ debug, чтобы я мог реплицировать его в сценарии установки.

РЕДАКТИРОВАТЬ:

Это обычный проект. NET Framework, и я говорю об установке, скажем, на производственном сервере, где инструменты разработки, такие как MSBuild, VS, не будут доступны. Я все еще могу использовать команду nuget.exe, поскольку это единственный исполняемый файл.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Есть ли способ «установить» пакет nuget, как это делает Visual Studio, но на сервере развертывания

Я думаю, у вас есть некоторое недопонимание по поводу этой проблемы, и я боюсь то, что вы хотите, не может быть реализовано с помощью nuget .

На самом деле это задание MSBuild для копирования содержимого связанного пакета nuget в bin \ Debug.

Фактически , MSBuild (MSBuild.exe) - это исполняемый файл со средой разработки vs.

Nuget отвечает только за загрузку package в свой локальный, а затем связать его с вашим проектом. Фактическая операция копирования содержимого - это просто работа MSBuild .

В VS IDE , MSBuild отвечает за эту операцию. Когда вы нажимаете build (на самом деле он вызывает MSBuild.exe ), зависимые DLL-файлы пакета nuget будут скопированы в вашу выходную папку.

Чтобы доказать это , вы можно создать новый пустой проект, а затем установить этот пакет nuget, а затем проверить, находятся ли файлы в bin \ Debug. После этого выполните Build , чтобы проверить, существуют ли файлы.

Решение

Поскольку VS2017 , MSBuild можно установить отдельно без VS IDE .

Вы можете установить Build Tool для Visual Studio 2019 .

Под Все загрузки -> Инструменты для Visual Studio 2019 -> Build Tool для Visual Studio 2019

enter image description here

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

Когда вы используете nuget.exe, установите такой пакет nuget в свой проект, затем используйте инструмент сборки для выполнения такой команды msbuild xxx\xxx\xxx.csproj -t:build для сборки проект. После этого вы увидите их в папке bin\Debug.

Обновление 1

Фактически , nuget выполняет задание, которое определяет, какие соответствующие зависимости копировать. Но nuget передает эту информацию в MSBuild . Nuget просто определяет соответствующую информацию, которая похожа на составление плана, c действие выполняется MSBuild , включая ссылку, восстановление, копирование и т. Д. Поэтому вам следует запустить MSBuild , чтобы получить то, что вы хотите.

Вдобавок , если вы по-прежнему получаете то, что хотите, и пропустите MSBuild , чтобы получить файл напрямую, вы можете предложить функцию команде . (нажмите Предложить функцию ).

0 голосов
/ 29 мая 2020

Вы можете использовать временный проект / publi sh. Создайте проект с любым TFM, который вы хотите, добавьте PackageReference в пакет, запустите dotnet publish, затем удалите <project_name>.* из каталога publi sh.

...