Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с Visual Studio 2017 и .NET SDK 1.0.0 добавлена функция NuGet PackageReference.
PackageReference
позволяет управлять зависимостями пакета непосредственно в файле проекта.
При выполнении операции восстановления транзитивные зависимости разрешаются автоматически, а соответствующие ссылки выбираются для каждого пакета в графе проекта.
В NuGet версии 5.3 для проектов в стиле пакета SDK для .NET была представлена вспомогательная функция PackageDownload
. Она позволяет скачать пакет, не включая его файлы в проект.
Спецификация PackageDownload
PackageDownload — это служебная функция для всех проектов в стиле пакета SDK для .NET, которая работает вместе с PackageReference
.
Элементы PackageDownload
поддерживают атрибуты, отличные от атрибутов PackageReference
. Поддерживаются только атрибуты, перечисленные в таблице ниже.
Атрибуты | Description | Пример |
---|---|---|
Версия | Поддерживаются только точные версии в [] . Несколько версий можно указать с разделителем ; |
[1.0.0] , [1.0.0];[2.0.0] |
Пакеты, полученные через PackageDownload, проходят тот же процесс установки, что и пакеты, полученные через PackageReference. Это означает, что проверяются подписи пакета и учитывается сопоставление источника пакета. Все вновь приобретенные пакеты PackageDownload будут установлены в папку глобальных пакетов.
Функция | PackageReference | PackageDownload |
---|---|---|
Выбор ресурсов пакета | Сборки из пакетов автоматически добавляются в проект и могут использоваться для компиляции и среды выполнения | В проект не включаются ресурсы из пакета |
Зависимости | Автоматически разрешаются и сводятся в одну версию | Не учитываются |
пакет… | Включено в спецификацию пакета | Не включено в спецификацию пакета |
Транзитивность | Элементы PackageReference автоматически распространяются на зависимые проекты | Элементы PackageDownload игнорируются зависимыми проектами |
Версия | Поддерживаются диапазоны версий, такие как 1.0.0 или [1.0.0, ) . Допускается только одна версия. |
Поддерживаются только точные версии. Можно скачать более одной версии. |
dotnet list package | Все зависимости включены | Пакеты PackageDownload не отображаются в dotnet list package . |
Из-за того, что PackageDownload не привязан к проекту, можно загрузить несколько версий одного пакета.
Ограничения PackageDownload
Учитывая, что это расширенная функция с ограниченной применимостью, она не обеспечивает такую же поддержку инструментов, как PackageReference.
- Не существует функциональных возможностей VisualStudio и dotnet.exe для изменения элементов PackageDownload. Их можно изменять только вручную в файлах проекта.
- Команды DotNet Add, Remove и List не учитывают элементы PackageDownload.
- Элементы PackageDownload не входят в файл блокировки пакетов.
Применения PackageDownload
Основное применение PackageDownload — загрузка пакетов, которые не соответствуют традиционной структуре пакета NuGet и, в основном, содержат зависимости времени сборки.
В идеале все зависимости выражаются через PackageReference, но если это невозможно или непрактично, эту функцию можно использовать для загрузки (download
) пакетов в определенное расположение, так же, как это можно сделать с помощью файла packages.config
, не привязанного к проекту.
Пример:
<Project Sdk="Microsoft.Build.NoTargets/1.0.80"> <!-- This is not a project we want to build. -->
<PropertyGroup>
<RestorePackagesPath>packages/</RestorePackagesPath> <!-- Changes the global packages folder-->
<MSBuildProjectExtensionsPath>$(RestorePackagesPath)obj/</MSBuildProjectExtensionsPath> <!-- It's still PackageReference, so project intermediates are still created. -->
<TargetFramework>net5.0</TargetFramework> <!-- This is not super relevant, as long as your SDK version supports it. -->
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder> <!-- If a package is resolved to a fallback folder, it may not be downloaded.-->
<AutomaticallyUseReferenceAssemblyPackages>false</AutomaticallyUseReferenceAssemblyPackages> <!-- We don't want to build this project, so we do not need the reference assemblies for the framework we chose.-->
</PropertyGroup>
<ItemGroup>
<PackageDownload Include="MySpecialPackage" version="[6.0.0]" />
</ItemGroup>
</Project>