Freigeben über


PackageDownload

Ab Visual Studio 2017 und .NET SDK 1.0.0 wurde die NuGet-Funktionalität PackageReference hinzugefügt.

PackageReference ermöglicht es Ihnen, Ihre Paketabhängigkeiten direkt in Ihrer Projektdatei zu verwalten. Wenn Sie den Wiederherstellungsvorgang durchführen, werden die transitiven Abhängigkeiten automatisch aufgelöst, und die entsprechenden Verweise werden für jedes Paket im Projektdiagramm ausgewählt.

In NuGet-Version 5.3 wurde ein Begleitfeature für Projekte im .NET SDK-Stil namens PackageDownload eingeführt, mit dem Sie das Paket herunterladen können, ohne seine Dateien in das Projekt einzuschließen.

PackageDownload-Spezifikation

„PackageDownload“ ist ein Hilfsprogrammfeature für alle Projekte im .NET SDK-Stil und funktioniert parallel zu PackageReference.

PackageDownload-Elemente unterstützen im Vergleich zu PackageReference unterschiedliche Attribute. Nur die in der folgenden Tabelle aufgeführten Attribute werden unterstützt.

Attribute Beschreibung Beispiel
Version Es werden nur genaue Versionen unterstützt, die in [] eingeschlossen sind. Mehrere Versionen können getrennt durch ; angegeben werden. [1.0.0], [1.0.0];[2.0.0]

Pakete, die über „PackageDownload“ abgerufen werden, durchlaufen denselben Installationsvorgang wie Pakete, die über „PackageReference“ abgerufen wurden. Dies bedeutet, dass Paketsignaturen überprüft werden, und die Paketquellzuordnung wird berücksichtigt. Alle neu erworbenen PackageDownload-Pakete werden im globalen Paketordner installiert.

Funktion PackageReference PackageDownload
Auswahl von Paketressourcen Assemblys aus Paketen werden dem Projekt automatisch hinzugefügt und können zur Kompilierung und Laufzeit verwendet werden. Im Projekt sind keine Ressourcen aus dem Paket enthalten.
Abhängigkeiten Automatisch aufgelöst und auf eine einzelne Version vereinfacht Werden überhaupt nicht berücksichtigt
pack In der Paketspezifikation enthalten Nicht in der Paketspezifikation enthalten
Transitivität PackageReference-Elemente werden automatisch an abhängige Projekte weitergegeben. PackageDownload-Elemente werden von abhängigen Projekten ignoriert.
Version Versionsbereiche wie 1.0.0 oder [1.0.0, ) werden unterstützt. Genau eine Version ist zulässig. Es werden nur genaue Versionen unterstützt. Es können mehr als nur eine Version heruntergeladen werden.
dotnet list package Alle Abhängigkeiten sind enthalten. PackageDownload-Pakete werden von dotnet list package nicht angezeigt.

Da PackageDownload-Elemente nicht über den Erwerb hinaus an das Projekt gebunden sind, können mehrere Versionen desselben Pakets heruntergeladen werden.

Einschränkungen für „PackageDownload“

Da es sich um ein erweitertes Feature mit eingeschränkter Anwendbarkeit handelt, verfügt es nicht über eine Toolunterstützung, die „PackageReference“ entspricht.

  • Es steht keine VisualStudio- oder dotnet.exe-Funktionalität zum Ändern von PackageDownload-Elementen zur Verfügung. Sie können sie nur manuell in Ihren Projektdateien ändern.
  • dotnet-Befehle zum Hinzufügen, Entfernen und Auflisten berücksichtigen PackageDownload-Elemente nicht.
  • PackageDownload-Elemente sind nicht Teil der Paketsperrdatei.

PackageDownload-Anwendungen

Die primäre Anwendung von „PackageDownload“ ist das Herunterladen von Paketen, die nicht der herkömmlichen NuGet-Paketstruktur folgen und hauptsächlich Abhängigkeiten zur Buildzeit aufweisen.

Im Idealfall werden alle Ihre Abhängigkeiten über „PackageReference“ ausgedrückt. In Szenarios, in denen dies nicht möglich oder oft noch nicht praktikabel ist, können Sie dieses Feature verwenden, um download-Pakete einfach an einen bestimmten Speicherort zu packen. Dies erfolgt auf ähnliche Weise wie mit einer packages.config-Datei, die nicht an ein Projekt gebunden ist.

Beispiel:


<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>