Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een .nuspec bestand is een XML-manifest dat pakketmetagegevens bevat. Dit manifest wordt zowel gebruikt om het pakket te bouwen als om gebruikers informatie te verstrekken. Het manifest is altijd opgenomen in een pakket.
In dit onderwerp:
- Algemeen formulier en schema
- Vervangingstokens (bij gebruik met een Visual Studio-project)
- Afhankelijkheden
- Expliciete assemblyverwijzingen
- Frameworkassemblyverwijzingen
- Assemblybestanden opnemen
- Inhoudsbestanden opnemen
- Voorbeeld van nuspec-bestanden
Compatibiliteit van projecttypen
Gebruiken
.nuspecmetnuget.exe packvoor niet-SDK-projecten die gebruikmaken vanpackages.config.Een
.nuspecbestand is niet vereist voor het maken van pakketten voor SDK-projecten (meestal .NET Core- en .NET Standard-projecten die gebruikmaken van het SDK-kenmerk. (Houd er rekening mee dat er een.nuspecwordt gegenereerd wanneer u het pakket maakt.)Als u een pakket maakt met of
dotnet.exe packmsbuild pack target, wordt u aangeraden alle eigenschappen op te nemen die zich meestal in het.nuspecbestand in het projectbestand bevinden. U kunt er echter voor kiezen om een.nuspecbestand te gebruiken dat u wilt inpakken ofdotnet.exemsbuild pack target.Voor projecten die van
packages.confignaar PackageReference zijn gemigreerd, is een.nuspecbestand niet vereist om het pakket te maken. Gebruik in plaats daarvan msbuild -t:pack.
Algemeen formulier en schema
Een nuspec.xsd schemabestand vindt u in de NuGet GitHub-opslagplaats.
Houd er rekening mee dat dit bestand alleen het meest recente schema voor een .nuspec bestand vertegenwoordigt.
Er bestaan geen officieel gepubliceerde versies en er komt geen versie van dat bestand overeen met een specifieke NuGet-versie.
Binnen dit schema heeft een .nuspec bestand de volgende algemene vorm:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<!-- Required elements-->
<id></id>
<version></version>
<description></description>
<authors></authors>
<!-- Optional elements -->
<!-- ... -->
</metadata>
<!-- Optional 'files' node -->
</package>
Voor een duidelijke visuele weergave van het schema opent u het schemabestand in Visual Studio in de ontwerpmodus en klikt u op de koppeling XML Schema Explorer . U kunt het bestand ook openen als code, met de rechtermuisknop in de editor klikken en XML-schemaverkenner weergeven selecteren. In beide gevallen krijgt u een weergave zoals hieronder (meestal uitgevouwen):
Alle NAMEN van XML-elementen in het .nuspec-bestand zijn hoofdlettergevoelig, net als voor XML in het algemeen. Het gebruik van het metagegevenselement <description> is bijvoorbeeld juist en <Description> is niet juist. Hieronder vindt u de juiste behuizing voor elke elementnaam.
Belangrijk
Hoewel het .nuspec bestand een verwijzing naar een schema (xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd") bevat, heeft de NuGet-Team nog nooit een schemabestand gepubliceerd dat kan worden gebruikt voor automatische schemavalidatie.
Vereiste metagegevenselementen
Hoewel de volgende elementen de minimale vereisten voor een pakket zijn, kunt u overwegen de optionele metagegevenselementen toe te voegen om de algehele ervaring die ontwikkelaars met uw pakket hebben te verbeteren.
Deze elementen moeten in een <metadata> element worden weergegeven.
identiteitskaart
De niet-hoofdlettergevoelige pakket-id, die uniek moet zijn in nuget.org of in welke galerie het pakket zich bevindt. Id's bevatten mogelijk geen spaties of tekens die niet geldig zijn voor een URL en volgen over het algemeen de regels voor .NET-naamruimten. Zie Een unieke pakket-id kiezen voor richtlijnen.
Wanneer u een pakket uploadt naar nuget.org, is het id veld beperkt tot 128 tekens.
version
De versie van het pakket, volgens het major.minor.patch-patroon . Versienummers kunnen een pre-releaseachtervoegsel bevatten, zoals beschreven in pakketversiebeheer.
Wanneer u een pakket uploadt naar nuget.org, is het version veld beperkt tot 64 tekens.
beschrijving
Een beschrijving van het pakket voor weergave van de gebruikersinterface.
Wanneer u een pakket uploadt naar nuget.org, is het description veld beperkt tot 4000 tekens.
authors
Een door komma's gescheiden lijst met pakketauteurs.
De authors en de owners van de nuspec worden genegeerd bij het uploaden van het pakket naar nuget.org. Zie Pakketeigenaren beheren op nuget.org voor informatie over het instellen van het eigendom van pakketten op nuget.org.
Optionele metagegevenselementen
Eigenaren
Belangrijk
eigenaren zijn afgeschaft. Gebruik in plaats daarvan auteurs.
Een door komma's gescheiden lijst met pakketeigenaren.
De owners van de nuspec wordt genegeerd bij het uploaden van het pakket naar nuget.org. Zie Pakketeigenaren beheren op nuget.org voor informatie over het instellen van het eigendom van pakketten op nuget.org.
projectUrl
Een URL voor de startpagina van het pakket, die vaak wordt weergegeven in de gebruikersinterface en nuget.org.
Wanneer u een pakket uploadt naar nuget.org, is het projectUrl veld beperkt tot 4000 tekens.
licenseUrl
Belangrijk
licenseUrl is afgeschaft. Gebruik in plaats daarvan een licentie.
Een URL voor de licentie van het pakket, die vaak wordt weergegeven in UIs, zoals nuget.org.
Wanneer u een pakket uploadt naar nuget.org, is het licenseUrl veld beperkt tot 4000 tekens.
licentie
Ondersteund met NuGet 4.9.0 en hoger
Een SPDX-licentieexpressie of -pad naar een licentiebestand in het pakket, vaak weergegeven in UIS's zoals nuget.org. Als u het pakket in licentie geeft onder een gemeenschappelijke licentie, zoals MIT of BSD-2-Clause, gebruikt u de bijbehorende SPDX-licentie-id. Voorbeeld:
<license type="expression">MIT</license>
Opmerking
NuGet.org accepteert alleen licentie-expressies die zijn goedgekeurd door het Open Source Initiative of de Free Software Foundation.
Als uw pakket is gelicentieerd onder meerdere algemene licenties, kunt u een samengestelde licentie opgeven met behulp van de syntaxis van de SPDX-expressie versie 2.0. Voorbeeld:
<license type="expression">BSD-2-Clause OR MIT</license>
Als u een aangepaste licentie gebruikt die niet wordt ondersteund door licentie-expressies, kunt u een .txt of .md bestand inpakken met de tekst van de licentie. Voorbeeld:
<package>
<metadata>
...
<license type="file">LICENSE.txt</license>
...
</metadata>
<files>
...
<file src="licenses\LICENSE.txt" target="" />
...
</files>
</package>
Bekijk voor het equivalent van MSBuild een licentie-expressie of een licentiebestand inpakken.
De exacte syntaxis van de licentie-expressies van NuGet wordt hieronder beschreven in ABNF.
license-id = <short form license identifier from https://spdx.org/spdx-specification-21-web-version#h.luq9dgcle9mo>
license-exception-id = <short form license exception identifier from https://spdx.org/spdx-specification-21-web-version#h.ruv3yl8g6czd>
simple-expression = license-id / license-id”+”
compound-expression = 1*1(simple-expression /
simple-expression "WITH" license-exception-id /
compound-expression "AND" compound-expression /
compound-expression "OR" compound-expression ) /
"(" compound-expression ")" )
license-expression = 1*1(simple-expression / compound-expression / UNLICENSED)
iconUrl
Belangrijk
iconUrl is afgeschaft. Gebruik in plaats daarvan het pictogram.
Een URL voor een afbeelding van 128x128 met transparantieachtergrond die moet worden gebruikt als pictogram voor het pakket in de ui-weergave. Zorg ervoor dat dit element de URL van de directe afbeelding bevat en niet de URL van een webpagina die de afbeelding bevat. Als u bijvoorbeeld een afbeelding van GitHub wilt gebruiken, gebruikt u de URL van het onbewerkte bestand, zoals https://github.com/<gebruikersnaam>/<opslagplaats>/raw/<branch>/<logo.png>.
Wanneer u een pakket uploadt naar nuget.org, is het iconUrl veld beperkt tot 4000 tekens.
icon
Ondersteund met NuGet 5.3.0 en hoger
Het is een pad naar een afbeeldingsbestand in het pakket, dat vaak wordt weergegeven in UIs, zoals nuget.org als het pakketpictogram. De grootte van het afbeeldingsbestand is beperkt tot 1 MB. Ondersteunde bestandsindelingen zijn JPEG en PNG. We raden een afbeeldingsresolutie van 128x128 aan.
U voegt bijvoorbeeld het volgende toe aan uw nuspec bij het maken van een pakket met behulp van nuget.exe:
<package>
<metadata>
...
<icon>images\icon.png</icon>
...
</metadata>
<files>
...
<file src="..\icon.png" target="images\" />
...
</files>
</package>
Nuspec-voorbeeld pakketpictogram.
Voor het equivalent van MSBuild bekijkt u Het inpakken van een pictogramafbeeldingsbestand.
Aanbeveling
Als u compatibiliteit met eerdere versies wilt behouden met clients en bronnen die icon nog niet ondersteunen, geeft u zowel icon als iconUrl op. Visual Studio biedt ondersteuning icon voor pakketten die afkomstig zijn van een bron op basis van mappen.
Readme
Ondersteund met NuGet 5.10.0 preview 2 en hoger
Wanneer u een leesmij-bestand inpakt, moet u het element gebruiken om het readme pakketpad op te geven ten opzichte van de hoofdmap van het pakket. Daarnaast moet u ervoor zorgen dat het bestand is opgenomen in het pakket. Ondersteunde bestandsindelingen bevatten alleen Markdown (.md).
U voegt bijvoorbeeld het volgende toe aan uw nuspec om een leesmij-bestand in te pakken met uw project:
<package>
<metadata>
...
<readme>docs\readme.md</readme>
...
</metadata>
<files>
...
<file src="..\readme.md" target="docs\" />
...
</files>
</package>
Voor het equivalent van MSBuild bekijkt u het inpakken van een leesmij-bestand.
requireLicenseAcceptance
Een Booleaanse waarde die aangeeft of de client de consument moet vragen de pakketlicentie te accepteren voordat het pakket wordt geïnstalleerd.
developmentDependency
(2,8+) Een Booleaanse waarde die aangeeft of het pakket wordt gemarkeerd als een afhankelijkheid met alleen ontwikkeling, waardoor het pakket niet kan worden opgenomen als een afhankelijkheid in andere pakketten. Met PackageReference (NuGet 4.8+) betekent deze vlag ook dat compileertijdassets worden uitgesloten van compilatie. Zie DevelopmentDependency-ondersteuning voor PackageReference
summary
Belangrijk
summary wordt afgeschaft. Gebruik in plaats daarvan description.
Een korte beschrijving van het pakket voor weergave van de gebruikersinterface. Als u dit weglaat, wordt er een afgekapte versie van description gebruikt.
Wanneer u een pakket uploadt naar nuget.org, is het summary veld beperkt tot 4000 tekens.
releaseNotes
(1,5+) Een beschrijving van de wijzigingen die in deze versie van het pakket zijn aangebracht, die vaak worden gebruikt in de gebruikersinterface, zoals het tabblad Updates van Visual Studio Package Manager in plaats van de pakketbeschrijving.
Wanneer u een pakket uploadt naar nuget.org, is het releaseNotes veld beperkt tot 35.000 tekens.
auteursrecht
(1,5+) Copyrightgegevens voor het pakket.
Wanneer u een pakket uploadt naar nuget.org, is het copyright veld beperkt tot 4000 tekens.
language
De landinstellings-id voor het pakket. Zie Gelokaliseerde pakketten maken.
tags
Een door spaties gescheiden lijst met tags en trefwoorden waarmee het pakket wordt beschreven en de vindbaarheid van pakketten wordt beschreven door middel van zoeken en filteren.
Wanneer u een pakket uploadt naar nuget.org, is het tags veld beperkt tot 4000 tekens.
Bruikbaar
(3.3+) Alleen voor intern NuGet-gebruik.
bewaarplaats
Metagegevens van opslagplaatsen, bestaande uit vier optionele kenmerken: type en url(4.0+) en branch (commit4,6+). Met deze kenmerken kunt u de .nupkg map toewijzen aan de opslagplaats die deze heeft gebouwd, met het potentieel om zo gedetailleerd mogelijk te worden als de naam van de afzonderlijke vertakking en/of sha-1-hash die het pakket heeft gebouwd. Dit moet een openbaar beschikbare URL zijn die rechtstreeks kan worden aangeroepen door een versiebeheersoftware. Het mag geen HTML-pagina zijn, omdat dit is bedoeld voor de computer. Als u een koppeling naar de projectpagina wilt maken, gebruikt u in plaats daarvan het projectUrl veld.
Voorbeeld:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
...
<repository type="git" url="https://github.com/NuGet/NuGet.Client.git" branch="dev" commit="e1c65e4524cd70ee6e22abe33e6cb6ec73938cb3" />
...
</metadata>
</package>
Wanneer u een pakket uploadt naar nuget.org, is het type kenmerk beperkt tot 100 tekens en is het url kenmerk beperkt tot 4000 tekens.
title
Een mensvriendelijke titel van het pakket dat in sommige ui-weergaven kan worden gebruikt. (nuget.org en Package Manager in Visual Studio geven geen titel weer)
Wanneer u een pakket uploadt naar nuget.org, is het title veld beperkt tot 256 tekens, maar wordt het niet gebruikt voor weergavedoeleinden.
Verzamelingselementen
packageTypes
(3,5+) Een verzameling van nul of meer <packageType> elementen die het type van het pakket aangeven, indien anders dan een traditioneel afhankelijkheidspakket. Elk packageType heeft kenmerken van de naam en versie. Zie Een pakkettype instellen.
afhankelijkheden
Een verzameling van nul of meer <dependency> elementen die de afhankelijkheden voor het pakket opgeven. Elke afhankelijkheid heeft kenmerken van id, versie, include (3.x+) en exclude (3.x+). Zie de onderstaande afhankelijkheden .
frameworkAssemblies
(1,2+) Een verzameling van nul of meer <frameworkAssembly> elementen die .NET Framework-assemblyverwijzingen identificeren die voor dit pakket nodig zijn, waardoor verwijzingen worden toegevoegd aan projecten die het pakket gebruiken. Elk frameworkAssembly heeft assemblyName - en targetFramework-kenmerken . Zie Het opgeven van framework assembly verwijzingen GAC hieronder.
references
(1,5+) Een verzameling van nul of meer <reference> elementen die assembly's benoemen in de map van lib het pakket die als projectverwijzingen worden toegevoegd. Elke verwijzing heeft een bestandskenmerk .
<references> kan ook een <group> element met een targetFramework-kenmerk bevatten dat vervolgens elementen bevat <reference> . Als u dit weglaat, worden alle verwijzingen opgenomen lib . Zie Hieronder expliciete assemblyverwijzingen opgeven .
contentFiles
(3.3+) Een verzameling <files> elementen die inhoudsbestanden identificeren die moeten worden opgenomen in het verbruikende project. Deze bestanden worden opgegeven met een set kenmerken die beschrijven hoe ze moeten worden gebruikt in het projectsysteem. Zie Bestanden opgeven die in het onderstaande pakket moeten worden opgenomen .
files
Het <package> knooppunt kan een <files> knooppunt bevatten als een knooppunt op hetzelfde niveau <metadata>en een <contentFiles> onderliggend <metadata>knooppunt om op te geven welke assembly- en inhoudsbestanden in het pakket moeten worden opgenomen. Zie Assemblybestanden opnemen en Inhoudsbestanden later in dit onderwerp opnemen voor meer informatie.
metagegevenskenmerken
minClientVersion
Hiermee geeft u de minimale versie van de NuGet-client op die dit pakket kan installeren, afgedwongen door nuget.exe en Visual Studio Package Manager. Dit wordt gebruikt wanneer het pakket afhankelijk is van specifieke functies van het .nuspec bestand dat is toegevoegd in een bepaalde versie van de NuGet-client. Een pakket met het developmentDependency kenmerk moet bijvoorbeeld '2.8' voor minClientVersionopgeven. Op dezelfde manier moet een pakket met behulp van het contentFiles element (zie de volgende sectie) zijn ingesteld minClientVersion op '3.3'. Houd er ook rekening mee dat omdat NuGet-clients vóór 2.5 deze vlag niet herkennen, ze altijd weigeren het pakket te installeren, ongeacht wat minClientVersion het bevat.
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="100.0.0.1">
<id>dasdas</id>
<version>2.0.0</version>
<title />
<authors>dsadas</authors>
<owners />
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>My package description.</description>
</metadata>
<files>
<file src="content\one.txt" target="content\one.txt" />
</files>
</package>
Vervangingstokens
Bij het maken van een pakket vervangt de nuget pack opdracht tokens met $-scheidingstekens in de .nuspec bestanden <metadata> en <files> knooppunten door waarden die afkomstig zijn van een projectbestand of de schakeloptie van -properties de pack opdracht.
Op de opdrachtregel geeft u tokenwaarden op met nuget pack -properties <name>=<value>;<name>=<value>. U kunt bijvoorbeeld een token zoals $owners$ en $desc$ in de .nuspec token gebruiken en de waarden op het tijdstip van de verpakking als volgt opgeven:
nuget pack MyProject.csproj -properties
owners=janedoe,harikm,kimo,xiaop;desc="Awesome app logger utility"
Als u waarden uit een project wilt gebruiken, geeft u de tokens op die worden beschreven in de onderstaande tabel (AssemblyInfo verwijst naar het bestand in Properties bijvoorbeeld AssemblyInfo.cs of AssemblyInfo.vb).
Als u deze tokens wilt gebruiken, voert nuget pack u het uit met het projectbestand in plaats van alleen de .nuspec. Wanneer u bijvoorbeeld de volgende opdracht gebruikt, worden de $id$ en $version$ tokens in een .nuspec bestand vervangen door de waarden en AssemblyVersion waarden van AssemblyName het project:
nuget pack MyProject.csproj
Wanneer u een project hebt, maakt u meestal de .nuspec eerste keer dat nuget spec MyProject.csproj u deze standaardtokens automatisch gebruikt. Als een project echter geen waarden voor vereiste .nuspec elementen bevat, mislukt het nuget pack . Als u projectwaarden wijzigt, moet u bovendien opnieuw bouwen voordat u het pakket maakt; Dit kan handig worden gedaan met de schakeloptie van build de packopdracht.
Met uitzondering van $configuration$, waarden in het project worden gebruikt in voorkeur voor elke toegewezen aan hetzelfde token op de opdrachtregel.
| Teken | Waardebron | Waarde |
|---|---|---|
| $id$ | Projectbestand | AssemblyName (titel) uit het projectbestand |
| $version$ | AssemblyInfo | AssemblyInformationalVersion indien aanwezig, anders AssemblyVersion |
| $author$ | AssemblyInfo | AssemblyCompany |
| $title$ | AssemblyInfo | AssemblyTitle |
| $description$ | AssemblyInfo | AssemblyDescription |
| $copyright$ | AssemblyInfo | AssemblyCopyright |
| $configuration$ | Assembly-DLL | De configuratie die wordt gebruikt voor het bouwen van de assembly, standaard ingesteld op Foutopsporing. Als u een pakket wilt maken met behulp van een releaseconfiguratie, gebruikt -properties Configuration=Release u altijd op de opdrachtregel. |
Tokens kunnen ook worden gebruikt om paden op te lossen wanneer u assemblybestanden en inhoudsbestanden opneemt. De tokens hebben dezelfde namen als de MSBuild-eigenschappen, waardoor het mogelijk is om bestanden te selecteren die moeten worden opgenomen, afhankelijk van de huidige buildconfiguratie. Als u bijvoorbeeld de volgende tokens in het .nuspec bestand gebruikt:
<files>
<file src="bin\$configuration$\$id$.pdb" target="lib\net40" />
</files>
En u bouwt een assembly waarvan AssemblyNameLoggingLibrary de Release configuratie in MSBuild is, de resulterende regels in het .nuspec bestand in het pakket is als volgt:
<files>
<file src="bin\Release\LoggingLibrary.pdb" target="lib\net40" />
</files>
Het element Afhankelijkheden
Het <dependencies> element binnen <metadata> bevat een willekeurig aantal <dependency> elementen waarmee andere pakketten worden geïdentificeerd waarvan het pakket op het hoogste niveau afhankelijk is. De kenmerken voor elk <dependency> zijn als volgt:
| Attribute | Description |
|---|---|
id |
(Vereist) De pakket-id van de afhankelijkheid, zoals EntityFramework en NUnit. Dit is de naam van het pakket nuget.org wordt weergegeven op een pakketpagina. |
version |
(Vereist) Het bereik van versies dat acceptabel is als een afhankelijkheid. Zie Pakketversiebeheer voor de exacte syntaxis. Zwevende versies worden niet ondersteund. |
| include | Een door komma's gescheiden lijst met labels voor opnemen/uitsluiten (zie hieronder) die aangeven welke afhankelijkheid moet worden opgenomen in het uiteindelijke pakket. De standaardwaarde is all. |
| exclude | Een door komma's gescheiden lijst met labels voor opnemen/uitsluiten (zie hieronder) die aangeven welke afhankelijkheid moet worden uitgesloten in het uiteindelijke pakket. De standaardwaarde is build,analyzers die te veel kan worden geschreven. Maar content/ ContentFiles worden ook impliciet uitgesloten in het uiteindelijke pakket dat niet te veel kan worden geschreven. Tags die zijn opgegeven met exclude voorrang hebben op de tags die zijn opgegeven met include.
include="runtime, compile" exclude="compile" is bijvoorbeeld hetzelfde als include="runtime". |
Wanneer u een pakket uploadt naar nuget.org, is het kenmerk van id elke afhankelijkheid beperkt tot 128 tekens en is het version kenmerk beperkt tot 256 tekens.
| Tag opnemen/uitsluiten | Betrokken mappen van het doel |
|---|---|
| contentFiles | Content |
| runtime | Runtime, resources en FrameworkAssemblies |
| compile | Lib |
| build | build (MSBuild props en doelen) |
| inheems | inheems |
| none | Geen mappen |
| all | Alle mappen |
De volgende regels geven bijvoorbeeld afhankelijkheden aan van PackageA versie 1.1.0 of hoger en PackageB versie 1.x.
<dependencies>
<dependency id="PackageA" version="1.1.0" />
<dependency id="PackageB" version="[1,2)" />
</dependencies>
De volgende regels geven afhankelijkheden van dezelfde pakketten aan, maar geef op dat de contentFiles en mappen van PackageA en alles behalve de native en compile mappen van PackageBbuild "
<dependencies>
<dependency id="PackageA" version="1.1.0" include="contentFiles, build" />
<dependency id="PackageB" version="[1,2)" exclude="native, compile" />
</dependencies>
Belangrijk
Wanneer u een .nuspec project maakt met behulp van nuget spec, worden afhankelijkheden in dat project niet automatisch opgenomen in het resulterende .nuspec bestand. Gebruik in plaats daarvan nuget pack myproject.csprojhet .nuspec-bestand in het gegenereerde .nupkg-bestand . Deze .nuspec bevat de afhankelijkheden.
Afhankelijkheidsgroepen
Versie 2.0+
Als alternatief voor één platte lijst kunnen afhankelijkheden worden opgegeven volgens het frameworkprofiel van het doelproject met behulp van <group> elementen binnen <dependencies>.
Elke groep heeft een kenmerk met de naam targetFramework en bevat nul of meer <dependency> elementen. Deze afhankelijkheden worden samen geïnstalleerd wanneer het doelframework compatibel is met het frameworkprofiel van het project.
Het <group> element zonder kenmerk targetFramework wordt gebruikt als de standaard- of terugvallijst met afhankelijkheden. Zie Doelframeworks voor de exacte framework-id's.
Belangrijk
De groepsindeling kan niet worden gemengd met een platte lijst.
Opmerking
De indeling van Target Framework Moniker (TFM) die in lib/ref de map wordt gebruikt, verschilt in vergelijking met de TFM die wordt gebruikt in dependency groups. Als de doelframeworks die zijn gedeclareerd in de dependencies group map van .nuspec het lib/ref bestand, geen exacte overeenkomsten hebben, pack zal de opdracht NuGet-waarschuwing NU5128 genereren.
In het volgende voorbeeld ziet u verschillende variaties van het <group> element:
<dependencies>
<group>
<dependency id="RouteMagic" version="1.1.0" />
</group>
<group targetFramework=".NETFramework4.7.2">
<dependency id="jQuery" version="1.6.2" />
<dependency id="WebActivator" version="1.4.4" />
</group>
<group targetFramework="netcoreapp3.1">
</group>
</dependencies>
Expliciete assemblyverwijzingen
Het <references> element wordt door projecten packages.config gebruikt om expliciet de assembly's op te geven waarnaar het doelproject moet verwijzen wanneer het pakket wordt gebruikt. Expliciete verwijzingen worden doorgaans gebruikt voor assembly's met alleen ontwerptijd. Zie de pagina over het selecteren van assembly's waarnaar wordt verwezen door projecten voor meer informatie.
Met het volgende <references> element wordt bijvoorbeeld NuGet geïnstrueerd om alleen xunit.dll verwijzingen toe te voegen aan en xunit.extensions.dll zelfs als er extra assembly's in het pakket zijn:
<references>
<reference file="xunit.dll" />
<reference file="xunit.extensions.dll" />
</references>
Referentiegroepen
Als alternatief voor één platte lijst kunnen verwijzingen worden opgegeven volgens het frameworkprofiel van het doelproject met behulp van <group> elementen binnen <references>.
Elke groep heeft een kenmerk met de naam targetFramework en bevat nul of meer <reference> elementen. Deze verwijzingen worden toegevoegd aan een project wanneer het doelframework compatibel is met het frameworkprofiel van het project.
Het <group> element zonder kenmerk targetFramework wordt gebruikt als de standaard- of terugvallijst met verwijzingen. Zie Doelframeworks voor de exacte framework-id's.
Belangrijk
De groepsindeling kan niet worden gemengd met een platte lijst.
In het volgende voorbeeld ziet u verschillende variaties van het <group> element:
<references>
<group>
<reference file="a.dll" />
</group>
<group targetFramework="net45">
<reference file="b45.dll" />
</group>
<group targetFramework="netcore45">
<reference file="bcore45.dll" />
</group>
</references>
Frameworkassemblyverwijzingen
Frameworkassembly's zijn assembly's die deel uitmaken van het .NET Framework en die zich al in de algemene assemblycache (GAC) voor een bepaalde computer bevinden. Door deze assembly's in het <frameworkAssemblies> element te identificeren, kan een pakket ervoor zorgen dat de vereiste verwijzingen worden toegevoegd aan een project in het geval dat het project nog geen dergelijke verwijzingen heeft. Dergelijke assembly's zijn natuurlijk niet rechtstreeks in een pakket opgenomen.
Het <frameworkAssemblies> element bevat nul of meer <frameworkAssembly> elementen, die elk de volgende kenmerken specificeert:
| Attribute | Description |
|---|---|
| assemblyName | (Vereist) De volledig gekwalificeerde assemblynaam. |
| targetFramework | (Optioneel) Hiermee geeft u het doelframework waarop deze verwijzing van toepassing is. Als u dit weglaat, geeft u aan dat de verwijzing van toepassing is op alle frameworks. Zie Doelframeworks voor de exacte framework-id's. |
In het volgende voorbeeld ziet u een verwijzing naar System.Net alle doelframeworks en alleen naar System.ServiceModel .NET Framework 4.0:
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.Net" />
<frameworkAssembly assemblyName="System.ServiceModel" targetFramework="net40" />
</frameworkAssemblies>
Assemblybestanden opnemen
Als u de conventies volgt die worden beschreven in Een pakket maken, hoeft u niet expliciet een lijst met bestanden in het .nuspec bestand op te geven. Met nuget pack de opdracht worden automatisch de benodigde bestanden opgehaald.
Belangrijk
Wanneer een pakket in een project wordt geïnstalleerd, voegt NuGet automatisch assemblyverwijzingen toe aan de DLL's van het pakket, met uitzondering van de dll's die een naam .resources.dll hebben, omdat wordt aangenomen dat ze gelokaliseerde satellietassembly's zijn. Vermijd daarom het gebruik .resources.dll van bestanden die anders essentiële pakketcode bevatten.
Als u dit automatische gedrag wilt omzeilen en expliciet wilt bepalen welke bestanden in een pakket zijn opgenomen, plaatst u een <files> element als een onderliggend element <package> van (en een hetzelfde niveau) <metadata>waarmee elk bestand met een afzonderlijk <file> element wordt geïdentificeerd. Voorbeeld:
<files>
<file src="bin\Debug\*.dll" target="lib" />
<file src="bin\Debug\*.pdb" target="lib" />
<file src="tools\**\*.*" exclude="**\*.log" />
</files>
Met NuGet 2.x en eerder en projecten die worden packages.configgebruikt, wordt het <files> element ook gebruikt om onveranderbare inhoudsbestanden op te nemen wanneer een pakket wordt geïnstalleerd. Met NuGet 3.3+ en projecten PackageReference wordt het <contentFiles> element gebruikt. Zie Inclusief inhoudsbestanden hieronder voor meer informatie.
Kenmerken van bestandselementen
Elk <file> element geeft de volgende kenmerken op:
| Attribute | Description |
|---|---|
| Src | De locatie van het bestand of de bestanden die moeten worden opgenomen, afhankelijk van uitsluitingen die zijn opgegeven door het exclude kenmerk. Het pad is relatief ten opzichte van het .nuspec bestand, tenzij er een absoluut pad is opgegeven. Het jokerteken * is toegestaan en het dubbele jokerteken ** impliceert een recursieve mapzoekopdracht. |
| doeldoel | Het relatieve pad naar de map in het pakket waarin de bronbestanden worden geplaatst, die moeten beginnen met lib, contentof buildtools. Zie Een .nuspec maken op basis van een op conventie gebaseerde werkmap. |
| Uitsluiten | Een door puntkomma's gescheiden lijst met bestanden of bestandspatronen die moeten worden uitgesloten van de src locatie. Het jokerteken * is toegestaan en het dubbele jokerteken ** impliceert een recursieve mapzoekopdracht. |
Voorbeelden
Eén assembly
Source file:
library.dll
.nuspec entry:
<file src="library.dll" target="lib" />
Packaged result:
lib\library.dll
Eén assembly specifiek voor een doelframework
Source file:
library.dll
.nuspec entry:
<file src="assemblies\net40\library.dll" target="lib\net40" />
Packaged result:
lib\net40\library.dll
Set DLL's met behulp van een jokerteken
Source files:
bin\release\libraryA.dll
bin\release\libraryB.dll
.nuspec entry:
<file src="bin\release\*.dll" target="lib" />
Packaged result:
lib\libraryA.dll
lib\libraryB.dll
DLL's voor verschillende frameworks
Source files:
lib\net40\library.dll
lib\net20\library.dll
.nuspec entry (using ** recursive search):
<file src="lib\**" target="lib" />
Packaged result:
lib\net40\library.dll
lib\net20\library.dll
Bestanden uitsluiten
Source files:
\tools\fileA.bak
\tools\fileB.bak
\tools\fileA.log
\tools\build\fileB.log
.nuspec entries:
<file src="tools\*.*" target="tools" exclude="tools\*.bak" />
<file src="tools\**\*.*" target="tools" exclude="**\*.log" />
Package result:
(no files)
Inhoudsbestanden opnemen
Inhoudsbestanden zijn onveranderbare bestanden die een pakket in een project moet opnemen. Onveranderbaar zijn, zijn ze niet bedoeld om te worden gewijzigd door het verbruikende project. Voorbeelden van inhoudsbestanden zijn:
- Afbeeldingen die zijn ingesloten als resources
- Bronbestanden die al zijn gecompileerd
- Scripts die moeten worden opgenomen in de build-uitvoer van het project
- Configuratiebestanden voor het pakket dat moet worden opgenomen in het project, maar waarvoor geen projectspecifieke wijzigingen nodig zijn
Inhoudsbestanden worden opgenomen in een pakket met behulp van het <files> element, waarbij de content map in het target kenmerk wordt opgegeven. Dergelijke bestanden worden echter genegeerd wanneer het pakket wordt geïnstalleerd in een project met behulp van PackageReference, dat in plaats daarvan het <contentFiles> element gebruikt.
Voor maximale compatibiliteit met het verbruiken van projecten geeft een pakket idealiter de inhoudsbestanden in beide elementen op.
Het bestandselement voor inhoudsbestanden gebruiken
Voor inhoudsbestanden gebruikt u gewoon dezelfde indeling als voor assemblybestanden, maar geeft u content op als de basismap in het target kenmerk, zoals wordt weergegeven in de volgende voorbeelden.
Basisinhoudsbestanden
Source files:
css\mobile\style1.css
css\mobile\style2.css
.nuspec entry:
<file src="css\mobile\*.css" target="content\css\mobile" />
Packaged result:
content\css\mobile\style1.css
content\css\mobile\style2.css
Inhoudsbestanden met mapstructuur
Source files:
css\mobile\style.css
css\mobile\wp7\style.css
css\browser\style.css
.nuspec entry:
<file src="css\**\*.css" target="content\css" />
Packaged result:
content\css\mobile\style.css
content\css\mobile\wp7\style.css
content\css\browser\style.css
Inhoudsbestand dat specifiek is voor een doelframework
Source file:
css\cool\style.css
.nuspec entry
<file src="css\cool\style.css" target="Content" />
Packaged result:
content\style.css
Inhoudsbestand gekopieerd naar een map met punt in naam
In dit geval ziet NuGet dat de extensie niet overeenkomt met de extensie target in src en behandelt dat deel van de naam target dus als een map:
Source file:
images\picture.png
.nuspec entry:
<file src="images\picture.png" target="Content\images\package.icons" />
Packaged result:
content\images\package.icons\picture.png
Inhoudsbestanden zonder extensies
Als u bestanden zonder extensie wilt opnemen, gebruikt u de * of ** jokertekens:
Source file:
flags\installed
.nuspec entry:
<file src="flags\**" target="flags" />
Packaged result:
flags\installed
Inhoudsbestanden met diep pad en diep doel
Omdat de bestandsextensies van de bron en het doel overeenkomen, gaat NuGet ervan uit dat het doel een bestandsnaam is en geen map:
Source file:
css\cool\style.css
.nuspec entry:
<file src="css\cool\style.css" target="Content\css\cool" />
or:
<file src="css\cool\style.css" target="Content\css\cool\style.css" />
Packaged result:
content\css\cool\style.css
De naam van een inhoudsbestand in het pakket wijzigen
Source file:
ie\css\style.css
.nuspec entry:
<file src="ie\css\style.css" target="Content\css\ie.css" />
Packaged result:
content\css\ie.css
Bestanden uitsluiten
Source file:
docs\*.txt (multiple files)
.nuspec entry:
<file src="docs\*.txt" target="content\docs" exclude="docs\admin.txt" />
or
<file src="*.txt" target="content\docs" exclude="admin.txt;log.txt" />
Packaged result:
All .txt files from docs except admin.txt (first example)
All .txt files from docs except admin.txt and log.txt (second example)
Het element contentFiles gebruiken voor inhoudsbestanden
NuGet 4.0+ met PackageReference
Standaard plaatst een pakket inhoud in een contentFiles map (zie hieronder) en nuget pack bevat alle bestanden in die map met behulp van standaardkenmerken. In dit geval hoeft u helemaal geen knooppunt op .nuspec te nemencontentFiles.
Als u wilt bepalen welke bestanden worden opgenomen, geeft het <contentFiles> element een verzameling <files> elementen op waarmee de exacte bestanden worden geïdentificeerd.
Deze bestanden worden opgegeven met een set kenmerken die beschrijven hoe ze moeten worden gebruikt in het projectsysteem:
| Attribute | Description |
|---|---|
| omvatten | (Vereist) De locatie van het bestand of de bestanden die moeten worden opgenomen, afhankelijk van uitsluitingen die zijn opgegeven door het exclude kenmerk. Het pad is relatief ten opzichte van de contentFiles map, tenzij er een absoluut pad is opgegeven. Het jokerteken * is toegestaan en het dubbele jokerteken ** impliceert een recursieve mapzoekopdracht. |
| Uitsluiten | Een door puntkomma's gescheiden lijst met bestanden of bestandspatronen die moeten worden uitgesloten van de src locatie. Het jokerteken * is toegestaan en het dubbele jokerteken ** impliceert een recursieve mapzoekopdracht. |
| buildAction | De buildactie die moet worden toegewezen aan het inhoudsitem voor MSBuild, zoals Content, NoneEmbedded Resource, Compile, , enzovoort. De standaardwaarde is Compile. |
| copyToOutput | Een Booleaanse waarde die aangeeft of inhoudsitems moeten worden gekopieerd naar de uitvoermap van de build (of publiceren). De standaardwaarde is onwaar. |
| afvlakken | Een Booleaanse waarde die aangeeft of inhoudsitems moeten worden gekopieerd naar één map in de build-uitvoer (true) of om de mapstructuur in het pakket (onwaar) te behouden. Deze vlag werkt alleen wanneer de copyToOutput-vlag is ingesteld op true. De standaardwaarde is onwaar. |
Bij het installeren van een pakket past NuGet de onderliggende elementen van <contentFiles> van boven naar beneden toe. Als meerdere vermeldingen overeenkomen met hetzelfde bestand, worden alle vermeldingen toegepast. De bovenste vermelding overschrijft de lagere vermeldingen als er een conflict is voor hetzelfde kenmerk.
Pakketmapstructuur
Het pakketproject moet inhoud structuren met behulp van het volgende patroon:
/contentFiles/{codeLanguage}/{TxM}/{any?}
-
codeLanguageskan het equivalent vancseen gegeven zijn,vb, ,fsofanyhet kleine lettersequivalent van een gegeven$(ProjectLanguage) -
TxMis een juridisch doelframework dat NuGet ondersteunt (zie Doelframeworks). - Elke mapstructuur kan worden toegevoegd aan het einde van deze syntaxis.
Voorbeeld:
Language- and framework-agnostic:
/contentFiles/any/any/config.xml
net45 content for all languages
/contentFiles/any/net45/config.xml
C#-specific content for net45 and up
/contentFiles/cs/net45/sample.cs
Lege mappen kunnen worden gebruikt _._ om af te zien van het leveren van inhoud voor bepaalde combinaties van taal en TxM, bijvoorbeeld:
/contentFiles/vb/any/code.vb
/contentFiles/cs/any/_._
Voorbeeld van de sectie contentFiles
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
...
<contentFiles>
<!-- Embed image resources -->
<files include="any/any/images/dnf.png" buildAction="EmbeddedResource" />
<files include="any/any/images/ui.png" buildAction="EmbeddedResource" />
<!-- Embed all image resources under contentFiles/cs/ -->
<files include="cs/**/*.png" buildAction="EmbeddedResource" />
<!-- Copy config.xml to the root of the output folder -->
<files include="cs/uap/config/config.xml" buildAction="None" copyToOutput="true" flatten="true" />
<!-- Copy run.cmd to the output folder and keep the directory structure -->
<files include="cs/commands/run.cmd" buildAction="None" copyToOutput="true" flatten="false" />
<!-- Include everything in the scripts folder except exe files -->
<files include="cs/net45/scripts/*" exclude="**/*.exe" buildAction="None" copyToOutput="true" />
</contentFiles>
</metadata>
</package>
Framework-referentiegroepen
Alleen versie 5.1+ wih PackageReference
Frameworkverwijzingen zijn een .NET Core-concept dat gedeelde frameworks vertegenwoordigt, zoals WPF of Windows Forms. Door een gedeeld framework op te geven, zorgt het pakket ervoor dat alle frameworkafhankelijkheden ervan zijn opgenomen in het verwijzende project.
Elk <group> element vereist een targetFramework kenmerk en nul of meer <frameworkReference> elementen.
In het volgende voorbeeld ziet u een nuspec die is gegenereerd voor een .NET Core WPF-project. Houd er rekening mee dat handcreatie nuspecs die frameworkverwijzingen bevatten, niet wordt aanbevolen. Overweeg in plaats daarvan het doelenpakket te gebruiken, waardoor ze automatisch worden afgeleid van het project.
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<dependencies>
<group targetFramework=".NETCoreApp3.1" />
</dependencies>
<frameworkReferences>
<group targetFramework=".NETCoreApp3.1">
<frameworkReference name="Microsoft.WindowsDesktop.App.WPF" />
</group>
</frameworkReferences>
</metadata>
</package>
Voorbeeld van nuspec-bestanden
Een eenvoudige .nuspec die geen afhankelijkheden of bestanden opgeeft
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>sample</id>
<version>1.2.3</version>
<authors>Kim Abercrombie, Franck Halmaert</authors>
<description>Sample exists only to show a sample .nuspec file.</description>
<language>en-US</language>
<projectUrl>http://xunit.codeplex.com/</projectUrl>
<license type="expression">MIT</license>
</metadata>
</package>
A .nuspec met afhankelijkheden
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>sample</id>
<version>1.0.0</version>
<authors>Microsoft</authors>
<dependencies>
<dependency id="another-package" version="3.0.0" />
<dependency id="yet-another-package" version="1.0.0" />
</dependencies>
</metadata>
</package>
A .nuspec met bestanden
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>routedebugger</id>
<version>1.0.0</version>
<authors>Jay Hamlin</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Route Debugger is a little utility I wrote...</description>
</metadata>
<files>
<file src="bin\Debug\*.dll" target="lib" />
</files>
</package>
Een .nuspec met frameworkassembly's
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>PackageWithGacReferences</id>
<version>1.0</version>
<authors>Author here</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>
A package that has framework assemblyReferences depending
on the target framework.
</description>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.Web" targetFramework="net40" />
<frameworkAssembly assemblyName="System.Net" targetFramework="net40-client, net40" />
<frameworkAssembly assemblyName="Microsoft.Devices.Sensors" targetFramework="sl4-wp" />
<frameworkAssembly assemblyName="System.Json" targetFramework="sl3" />
</frameworkAssemblies>
</metadata>
</package>
In dit voorbeeld zijn de volgende geïnstalleerd voor specifieke projectdoelen:
- . NET4 ->
System.Web,System.Net - . NET4-clientprofiel ->
System.Net - Silverlight 3 ->
System.Json - WindowsPhone ->
Microsoft.Devices.Sensors