Использование 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 Phone в определенном расположении с определенным макетом, пакет 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. |