Что является основным различием между публикацией dotnet и пакетом dotnet

В чем основное различие между dotnet pack и publish?

Из описания Microsoft я понимаю, что pack создает пакет, а publish создает пакет + DLL.

Это верно? Если так, то почему бы просто не всегда использовать publish и не использовать файл DLL, если он не нужен.

Ответ 1

dotnet pack - Создает NuGet-пакет вашего кода.

В этом ключевое отличие - это позволит публиковать на http://nuget.org или на сервере Nuget, который может быть удален другими разработчиками, или даже для использования с Octopus Deploy.

dotnet publish - Публикация .NET-зависимого или автономного приложения.

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

Ответ 2

Добавление к ответу @t0mm13b:

dotnet pack: выход представляет собой пакет, который предназначен для повторного использования другими проектами.

dotnet publish: вывод является средним для развертывания/ "отгрузки" - это не один "пакетный файл", а каталог со всем выходом проекта.

Ответ 3

По сути, когда мы используем команду pack, она создает пакет, а когда мы используем команду publish, она создает папку, которую можно скопировать и выполнить в любом месте из нее. Но что делает команду pack уникальной, так это то, что пакет обновляется на сервере nuget без загрузки его зависимостей. Его зависимости обновляются в проекте, который выбирает пакет, когда мы запускаем команду dotnet restore, и это не относится к случаю dotnet publish, поскольку он содержит сторонние зависимости, упакованные в пакет.