PaketDownload

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

PackageReference ermöglicht es Ihnen, Die Paketabhängigkeiten direkt in Ihrer Projektdatei zu verwalten. Wenn Sie die Wiederherstellung ausfü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 .NET SDK-Stil-ProjektePackageDownloadeingeführt, die es Ihnen ermöglichen, das Paket herunterzuladen, ohne die zugehörigen Dateien in das Projekt einzuteilen.

PackageDownload-Spezifikation

PackageDownload ist ein Hilfsprogramm für alle .NET-SDK-Stil-Projekten und arbeitet zusammen mit PackageReference.

PackageDownload Elemente unterstützen unterschiedliche Attribute im Vergleich zu PackageReference. Es werden nur Attribute unterstützt, die in der folgenden Tabelle aufgeführt sind.

Attribute Description Example
Version Nur genaue Versionen, umgeben von [] , werden unterstützt. Mehrere Versionen können durch Trennzeichen getrennt werden. ; [1.0.0], [1.0.0];[2.0.0]

Pakete, die über PackageDownload erworben werden, werden demselben Installationsprozess unterzogen wie Pakete, die über PackageReference erworben wurden. Dies bedeutet, dass Paketsignaturen überprüft werden, die Paketquellzuordnung wird berücksichtigt. Alle neu erworbenen PackageDownload-Pakete werden im globalen Paketordner installiert.

Merkmal PackageReference PaketDownload
Auswahl von Paketressourcen Assemblies aus Paketen werden dem Projekt automatisch hinzugefügt und können für die Kompilierung und Laufzeit verwendet werden. Im Projekt sind keine Ressourcen aus dem Paket enthalten.
Abhängigkeiten Automatisch aufgelöst und auf eine einzelne Version reduziert Überhaupt nicht berücksichtigt
pack Enthalten in der Paketspezifikation Nicht in der Paketspezifikation enthalten.
Transitivität PackageReference-Elemente werden automatisch an abhängige Projekte verteilt. PackageDownload-Elemente werden von abhängigen Projekten ignoriert.
Version Versionsbereiche wie 1.0.0 oder [1.0.0, ) werden unterstützt. Genau 1 Version ist zulässig. Nur genaue Versionen werden unterstützt. Mehr als 1 Version kann heruntergeladen werden.
dotnet-Listenpaket Alle Abhängigkeiten sind enthalten. PackageDownload-Pakete werden von dotnet list package nicht angezeigt.

Aufgrund der Tatsache, dass PackageDownload nicht über den Erwerb hinaus an das Projekt gebunden ist, können mehrere Versionen desselben Pakets heruntergeladen werden.

PackageDownload-Einschränkungen

Da dies ein erweitertes Feature mit eingeschränkter Anwendbarkeit ist, verfügt es nicht über eine Toolunterstützung, die PackageReference entspricht.

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

PackageDownload-Anwendungen

Die primäre Anwendung von PackageDownload lädt Pakete herunter, die nicht der herkömmlichen NuGet-Paketstruktur folgen und in erster Linie Buildzeitabhängigkeiten aufweisen.

Im Idealfall werden alle Ihre Abhängigkeiten über PackageReference ausgedrückt. In Szenarien, in denen das nicht möglich ist oder oft noch nicht praktisch ist, können Sie dieses Feature verwenden, um einfach download-Pakete an einen bestimmten Speicherort zu speichern, auf ähnliche Weise, wie Sie dies mit einer packages.config-Datei erreichen könnten, 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>