Использование 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 Файл имя_пакета_SDKN.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 для расширений (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. Да (частично) Целевой рабочей средой является сводная среда. Фильтрация в пользовательском интерфейсе отсутствует. Во время установки может быть возвращена ошибка.
Механизм поддерживает указание сведений о регистрации собственных 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 Телефон в определенном расположении с определенным макетом, пакет SDK автоматически интегрируется со всеми функциями Visual Studio. N
Механизм поддерживает компьютер для разработки без установленных программ. (Это значит, что устанавливать ничего не требуется — действуют только принципы простого извлечения из системы управления версиями.) N Поскольку вы ссылаетесь на пакет SDK, необходимо отдельно вернуть решение и пакет SDK. Пакет SDK можно вернуть из двух расположений по умолчанию вне реестра, из которых MSBuild выполняет итерацию по пакетам SDK (дополнительные сведения см. в статье Creating a Software Development Kit (Создание пакета средств разработки программного обеспечения)). Или если пользовательское расположение состоит из пакетов SDK, можно указать следующий код в файле проекта:

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

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