NuGet против SDK-пакета в качестве ссылки на проект

Эта статья предназначена для того, чтобы разработчики решили, следует ли упаковать программное обеспечение в виде пакета NuGet или пакета sdk для разработки программного обеспечения. В частности, он рассматривает различия между этими двумя понятиями, когда они упоминаются в проекте Visual Studio.

  • NuGet — это система управления пакетами с открытым кодом, которая упрощает процесс включения библиотек в проект. Для .NET (включая .NET Core), NuGet — это поддерживаемый корпорацией Майкрософт механизм совместного использования кода. NuGet определяет, как пакеты для .NET создаются, размещаются и используются и предоставляют средства для каждой из этих ролей. В Visual Studio в проект добавляются пакеты NuGet с помощью пользовательского интерфейса диспетчера пакетов .

  • Пакет SDK — это коллекция файлов, которые Visual Studio рассматривает как один ссылочный элемент. В диалоговом окне "Диспетчер ссылок" в Visual Studio перечислены все SDK, относящиеся к текущему проекту, когда вы выбираете Добавить ссылку. При добавлении пакета SDK в проект вы можете получить доступ ко всему содержимому этого пакета SDK с помощью IntelliSense, окна панели элементов, конструкторов, браузера объектов, MSBuild, развертывания, отладки и упаковки.

Какой механизм следует использовать?

В следующей таблице вы можете сравнить функции ссылок в SDK с функциями ссылок в NuGet.

Особенность Поддержка пакета SDK Заметки пакета SDK Поддержка NuGet Заметки о NuGet
Механизм ссылается на одну сущность, а затем доступны все файлы и функциональные возможности. Y Вы добавляете пакет SDK с помощью диалогового окна диспетчера ссылок, а все файлы и функции доступны во время рабочего процесса разработки. Y
MSBuild автоматически использует сборки и метаданные Windows (.winmd) файлов. Y Ссылки в пакете SDK автоматически передаются компилятору. Y
MSBuild автоматически использует файлы H или LIB. Y Файл SDKName.props сообщает Visual Studio, как настроить каталог Visual C++ и т. д. для автоматического использования .h или .lib. N
MSBuild автоматически использует файлы .js или .css. Y В обозревателе решенийможно развернуть узел ссылки на пакет SDK JavaScript, чтобы отобразить отдельные .js или .css файлы, а затем создать теги <source include/> путем перетаскивания этих файлов в исходные файлы. Пакет SDK поддерживает F5 и автоматическую настройку пакетов. Y
MSBuild автоматически добавляет элемент управления в панели инструментов. Y Средства могут потреблять пакеты SDK и отображать элементы управления на указанных вкладках. N
Механизм поддерживает Visual Studio Installer для расширений (VSIX). Y VSIX имеет специальный манифест и логику для создания пакетов SDK Y VSIX можно внедрить в другую программу установки.
Браузер объектов перечисляет ссылки. Y Браузер объектов автоматически получает список ссылок в SDK и перечисляет их. N
Файлы и ссылки автоматически добавляются в диалоговое окно диспетчера ссылок (ссылки справки и т. д.) Y Диалоговое окно Диспетчер ссылок автоматически перечисляет SDK, а также содержит ссылки на справку и список зависимостей SDK. N NuGet предоставляет собственное диалоговое окно "Управление пакетами NuGet".
Механизм поддерживает несколько архитектур. Y Пакеты SDK могут включать несколько конфигураций. MSBuild использует соответствующие файлы для каждой конфигурации проекта. N
Механизм поддерживает несколько конфигураций. Y Пакеты SDK могут включать несколько конфигураций. В зависимости от архитектуры проекта MSBuild использует соответствующие файлы для каждой архитектуры проекта. N
Механизм может указать "не копировать". Y В зависимости от того, в какую папку помещаются файлы — \redist или \designtime, — можно управлять тем, какие файлы копируются в пакет потребляющего приложения. N Вы объявляете, какие файлы следует копировать в манифесте пакета.
Содержимое отображается в локализованных файлах. Y Локализованные XML-документы в пакетах SDK автоматически включаются для улучшения работы во время разработки. N
MSBuild поддерживает одновременное использование нескольких версий пакета SDK. Y Пакет SDK поддерживает одновременное использование нескольких версий. N Это не является ссылкой. В проекте не может быть несколько версий файлов NuGet.
Механизм поддерживает указание применимых целевых платформ, версий Visual Studio и типов проектов. Y Диалоговое окно диспетчера ссылок и панель элементов отображают только пакеты SDK, которые применяются к проекту, чтобы пользователи могли легко выбрать соответствующие пакеты SDK. Y (частичный) Pivot — это целевой фреймворк. Фильтрация в пользовательском интерфейсе отсутствует. Во время установки может возникнуть ошибка.
Механизм поддерживает указание сведений о регистрации для собственных winMD. Y Можно указать корреляцию между WINMD-файлом и файлом .dll в SDKManifest.xml. N
Механизм поддерживает указание зависимостей от других пакетов SDK. Y Пакет SDK уведомляет только пользователя; Пользователь по-прежнему должен установить их и ссылаться на них вручную. Y NuGet вытягивает их автоматически; Пользователь не получает уведомления.
Механизм интегрируется с концепциями Microsoft Store, такими как манифест приложения и идентификатор платформы. Y SDK должен передавать концепции, специфичные для Магазина, чтобы упаковка и F5 корректно функционировали с SDK, доступными в Магазине. N
Механизм интегрируется с конвейером отладки приложений для приложений Магазина Windows 8.x. Y Пакет SDK должен передавать основные понятия, связанные с Магазином, чтобы упаковка и F5 работали правильно с пакетами SDK, доступными в Магазине. Y Содержимое NuGet становится частью проекта. Никакого специального учета F5 не требуется.
Механизм интегрируется с манифестами приложения. Y Пакет SDK должен передавать основные понятия, связанные с Магазином, чтобы упаковка и F5 работали правильно с пакетами SDK, доступными в Магазине. Y Содержимое NuGet становится частью проекта. Никакого специального учета F5 не требуется.
Механизм развёртывает нессылочные файлы (например, развёртывание тестовой платформы, на которой выполняются тесты приложений Магазина Windows 8.x). Y Если переместить файлы в папку \redist, они автоматически развертываются. Y
Механизм автоматически добавляет пакеты SDK для платформы в интегрированной среде разработки Visual Studio. Y Если поместить SDK Windows 8 или SDK Windows Phone в определенном месте с определенной структурой, SDK автоматически интегрируется со всеми функциями Visual Studio. N
Механизм поддерживает чистый компьютер разработчика. (То есть установка не требуется, а простое извлечение из системы управления исходным кодом будет работать.) N Поскольку вы ссылаетесь на SDK, необходимо отдельно проверить ваше решение и сам SDK. Вы можете проверить наличие набора средств разработки (SDK) в двух стандартных расположениях, не относящихся к реестру, из которых MSBuild перебирает SDK (дополнительные сведения см. в разделе Создание набора средств разработки программного обеспечения). Или, если произвольное расположение содержит SDK, в файле проекта можно указать следующий код:

<PropertyGroup>
  <SDKReferenceDirectoryRoot>
  C:\MySDKs
  </SDKReferenceDirectoryRoot>
</PropertyGroup>

Затем добавьте пакеты SDK в эту папку.
Y Вы можете ознакомиться с решением, а Visual Studio сразу распознает и действует над файлами.
Вы можете присоединиться к большому существующему сообществу авторов пакетов. N/A Сообщество новое. Y
Вы можете присоединиться к большому существующему сообществу потребителей пакетов. N/A Сообщество новое. Y
Вы можете присоединиться к экосистеме партнеров (пользовательские галереи, репозитории и т. д.). N/A Доступные репозитории включают Visual Studio Marketplace, Центр загрузки Майкрософт и Microsoft Store. Y
Механизм интегрируется с серверами сборки для постоянной интеграции, которые используются для разработки и использования пакетов. Y Пакет SDK должен передать проверенное расположение (свойство SDKReferenceDirectoryRoot) в MSBuild через командную строку. Y
Механизм поддерживает как стабильные, так и предварительные версии пакетов. Y Пакет SDK поддерживает добавление ссылок на несколько версий. Y
Механизм поддерживает автоматическое обновление для установленных пакетов. Y При отправке в виде VSIX или части автоматических обновлений Visual Studio пакет SDK предоставляет автоматические уведомления. Y
Механизм содержит автономный .exe-файл для создания и использования пакетов. Y Пакет SDK содержит MSBuild.exe. Y
Пакеты можно проверить в элементе управления версиями. Y Вы не можете зарегистрировать ни один элемент за пределами узла "документы", что означает, что пакеты SDK расширений могут не быть зарегистрированы. Размер пакета расширения SDK может быть большим. Y
Для создания и использования пакетов можно использовать интерфейс PowerShell. Y (потребление), N (создание) Нет инструментов для создания пакета SDK. Потребление выполняет MSBuild в командной строке. Y
Пакет символов можно использовать для поддержки отладки. Y При перемещении файлов .pdb в пакет SDK файлы автоматически обрабатываются. Y
Механизм поддерживает автоматическое обновление диспетчера пакетов. N/A Пакет SDK будет изменен с помощью MSBuild. Y
Механизм поддерживает упрощенный формат манифеста. Y SDKManifest.xml поддерживает множество атрибутов, но обычно требуется небольшое подмножество. Y
Механизм доступен для всех выпусков Visual Studio. Y Пакет SDK поддерживает все выпуски Visual Studio. Y NuGet поддерживает все выпуски Visual Studio.