Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья предназначена для того, чтобы разработчики решили, следует ли упаковать программное обеспечение в виде пакета 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. |