Dela via


.nuspec-referens

En .nuspec fil är ett XML-manifest som innehåller paketmetadata. Det här manifestet används både för att skapa paketet och för att ge information till konsumenter. Manifestet ingår alltid i ett paket.

I det här avsnittet:

Kompatibilitet för projekttyp

Allmänt formulär och schema

En nuspec.xsd schemafil finns på NuGet GitHub-lagringsplatsen. Observera att den här filen endast representerar det senaste schemat för en .nuspec fil. Det finns inga officiellt publicerade versioner och ingen version av filen motsvarar någon specifik NuGet-version.

I det här schemat har en .nuspec fil följande allmänna formulär:

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

Om du vill ha en tydlig visuell representation av schemat öppnar du schemafilen i Visual Studio i designläge och klickar på länken XML-schemautforskaren . Alternativt öppnar du filen som kod, högerklickar i redigeraren och väljer Visa XML-schemautforskaren. Hur som helst får du en vy som den nedan (när den mestadels expanderas):

Visual Studio Schema Explorer med nuspec.xsd öppet

Alla XML-elementnamn i .nuspec-filen är skiftlägeskänsliga, vilket är fallet för XML i allmänhet. Att till exempel använda metadataelementet <description> är korrekt och <Description> är inte korrekt. Rätt hölje för varje elementnamn dokumenteras nedan.

Viktigt!

.nuspec Filen innehåller en referens till ett schema (xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"), men NuGet-Team har aldrig publicerat en schemafil som kan användas för automatisk schemavalidering.

Nödvändiga metadataelement

Även om följande element är minimikraven för ett paket bör du överväga att lägga till valfria metadataelement för att förbättra den övergripande upplevelsen som utvecklare har med ditt paket.

Dessa element måste visas i ett <metadata> element.

Id-nummer

Den skiftlägeskänsliga paketidentifieraren, som måste vara unik för nuget.org eller vilket galleri paketet finns i. ID:t får inte innehålla blanksteg eller tecken som inte är giltiga för en URL och följer vanligtvis .NET-namnområdesregler. Mer information finns i Välja en unik paketidentifierare.

När du laddar upp ett paket till nuget.org är fältet id begränsat till 128 tecken.

version

Versionen av paketet följer mönstret major.minor.patch . Versionsnummer kan innehålla ett förhandsversionssuffix enligt beskrivningen i Paketversionshantering.

När du laddar upp ett paket till nuget.org är fältet version begränsat till 64 tecken.

beskrivning

En beskrivning av paketet för UI-visning.

När du laddar upp ett paket till nuget.org är fältet description begränsat till 4 000 tecken.

authors

En kommaavgränsad lista över paketförfattare. Och authorsowners från nuspec ignoreras när paketet laddas upp till nuget.org. Information om hur du anger paketägarskap på nuget.org finns i Hantera paketägare på nuget.org.

Valfria metadataelement

ägare

Viktigt!

ägare är inaktuella. Använd författare i stället.

En kommaavgränsad lista över paketägare. Från owners nuspec ignoreras när paketet laddas upp till nuget.org. Information om hur du anger paketägarskap på nuget.org finns i Hantera paketägare på nuget.org.

projectUrl

En URL för paketets startsida, som ofta visas i användargränssnittet, visas samt nuget.org.

När du laddar upp ett paket till nuget.org är fältet projectUrl begränsat till 4 000 tecken.

licenseUrl

Viktigt!

licenseUrl är inaktuell. Använd licens i stället.

En URL för paketets licens, som ofta visas i UIs som nuget.org.

När du laddar upp ett paket till nuget.org är fältet licenseUrl begränsat till 4 000 tecken.

license

Stöds med NuGet 4.9.0 och senare

Ett SPDX-licensuttryck eller sökväg till en licensfil i paketet, som ofta visas i UIs som nuget.org. Om du licensierar paketet under en gemensam licens, till exempel MIT eller BSD-2-Clause, använder du den associerade SPDX-licensidentifieraren. Till exempel:

<license type="expression">MIT</license>

Anmärkning

NuGet.org accepterar endast licensuttryck som är godkända av Initiativet för öppen källkod eller Free Software Foundation.

Om ditt paket är licensierat under flera vanliga licenser kan du ange en sammansatt licens med hjälp av SPDX-uttryckssyntax version 2.0. Till exempel:

<license type="expression">BSD-2-Clause OR MIT</license>

Om du använder en anpassad licens som inte stöds av licensuttryck kan du paketera en .txt eller .md fil med licensens text. Till exempel:

<package>
  <metadata>
    ...
    <license type="file">LICENSE.txt</license>
    ...
  </metadata>
  <files>
    ...
    <file src="licenses\LICENSE.txt" target="" />
    ...
  </files>
</package>

Ta en titt på Paketering av ett licensuttryck eller en licensfil för MSBuild-motsvarigheten.

Den exakta syntaxen för NuGets licensuttryck beskrivs nedan i 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

Viktigt!

iconUrl är inaktuell. Använd ikonen i stället.

En URL för en 128x128-bild med genomskinlighetsbakgrund som ska användas som ikon för paketet i användargränssnittet. Kontrollera att det här elementet innehåller direktbilds-URL:en och inte URL:en för en webbsida som innehåller bilden. Om du till exempel vill använda en bild från GitHub använder du den råa fil-URL:en som https://github.com/<användarnamn>/<lagringsplats>/raw/<branch>/<logo.png>.

När du laddar upp ett paket till nuget.org är fältet iconUrl begränsat till 4 000 tecken.

icon

Stöds med NuGet 5.3.0 och senare

Det är en sökväg till en bildfil i paketet, som ofta visas i UIs som nuget.org som paketikonen. Bildfilens storlek är begränsad till 1 MB. Filformat som stöds är JPEG och PNG. Vi rekommenderar en bildupplösning på 128x128.

Du kan till exempel lägga till följande i din nuspec när du skapar ett paket med hjälp av nuget.exe:

<package>
  <metadata>
    ...
    <icon>images\icon.png</icon>
    ...
  </metadata>
  <files>
    ...
    <file src="..\icon.png" target="images\" />
    ...
  </files>
</package>

Paketikonens nuspecexempel.

Ta en titt på Paketering av en ikonbildfil för MSBuild-motsvarigheten.

Tips/Råd

Om du vill upprätthålla bakåtkompatibilitet med klienter och källor som ännu inte har stöd iconför anger du både icon och iconUrl. Visual Studio stöder icon paket som kommer från en mappbaserad källa.

Readme

Stöds med NuGet 5.10.0 förhandsversion 2 och senare

När du packar en readme-fil måste du använda elementet readme för att ange paketsökvägen i förhållande till paketets rot. Dessutom måste du se till att filen ingår i paketet. Filformat som stöds omfattar endast Markdown (.md).

Du kan till exempel lägga till följande i din nuspec för att packa en readme-fil med projektet:

<package>
  <metadata>
    ...
    <readme>docs\readme.md</readme>
    ...
  </metadata>
  <files>
    ...
    <file src="..\readme.md" target="docs\" />
    ...
  </files>
</package>

För MSBuild-motsvarigheten kan du ta en titt på Packa en readme-fil.

requireLicenseAcceptance

Ett booleskt värde som anger om klienten måste uppmana konsumenten att godkänna paketlicensen innan paketet installeras.

developmentDependency

(2.8+) Ett booleskt värde som anger om paketet ska markeras som ett utvecklingsberoende, vilket förhindrar att paketet inkluderas som ett beroende i andra paket. Med PackageReference (NuGet 4.8+) innebär den här flaggan också att den undantar kompileringstidstillgångar från kompilering. Se Stöd för DevelopmentDependency för PackageReference

summary

Viktigt!

summary håller på att bli inaktuell. Använd description i stället.

En kort beskrivning av paketet för UI-visning. Om den utelämnas används en trunkerad version av description .

När du laddar upp ett paket till nuget.org är fältet summary begränsat till 4 000 tecken.

releaseNotes

(1.5+) En beskrivning av de ändringar som gjorts i den här versionen av paketet, som ofta används i användargränssnittet, till exempel fliken Uppdateringar i Visual Studio Package Manager i stället för paketbeskrivningen.

När du laddar upp ett paket till nuget.org är fältet releaseNotes begränsat till 35 000 tecken.

(1.5+) Upphovsrättsinformation för paketet.

När du laddar upp ett paket till nuget.org är fältet copyright begränsat till 4 000 tecken.

Språk

Språk-ID för paketet. Se Skapa lokaliserade paket.

tags

En utrymmesavgränsad lista med taggar och nyckelord som beskriver paketet och underlättar identifiering av paket genom sökning och filtrering.

När du laddar upp ett paket till nuget.org är fältet tags begränsat till 4 000 tecken.

Användbara

(3.3+) Endast för intern NuGet-användning.

förråd

Lagringsplatsmetadata, som består av fyra valfria attribut: type och url(4.0+), och branchcommit(4.6+). Med de här attributen .nupkg kan du mappa till lagringsplatsen som skapade den, med potential att få så detaljerad som det enskilda grennamnet och/eller inchecknings-SHA-1-hashen som skapade paketet. Detta bör vara en offentligt tillgänglig URL som kan anropas direkt av en versionskontrollprogramvara. Det bör inte vara en html-sida eftersom detta är avsett för datorn. Om du vill länka till projektsidan använder du fältet projectUrl i stället.

Till exempel:

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

När du laddar upp ett paket till nuget.org type är attributet begränsat till 100 tecken och url attributet är begränsat till 4 000 tecken.

title

En människovänlig titel på paketet som kan användas i vissa gränssnittsdisplayer. (nuget.org och Package Manager i Visual Studio visar inte rubrik)

När du laddar upp ett paket till nuget.org är fältet title begränsat till 256 tecken men används inte för visningsändamål.

Samlingselement

packageTypes

(3.5+) En samling med noll eller fler <packageType> element som anger pakettypen om det inte är ett traditionellt beroendepaket. Varje packageType har attribut för namn och version. Se Ange en pakettyp.

beroenden

En samling med noll eller fler <dependency> element som anger beroenden för paketet. Varje beroende har attribut för ID, version, include (3.x+) och exclude (3.x+). Se Beroenden nedan.

frameworkAssemblies

(1.2+) En samling med noll eller fler <frameworkAssembly> element som identifierar .NET Framework-sammansättningsreferenser som det här paketet kräver, vilket säkerställer att referenser läggs till i projekt som använder paketet. Varje frameworkAssembly har attributen assemblyName och targetFramework . Se Ange ramverkssammansättningsreferenser GAC nedan.

references

(1.5+) En samling med noll eller fler <reference> element som namnger sammansättningar i paketets lib mapp som läggs till som projektreferenser. Varje referens har ett filattribut . <references> kan också innehålla ett <group> element med ett targetFramework-attribut som sedan innehåller <reference> element. Om det utelämnas inkluderas alla referenser i lib . Se Ange explicita sammansättningsreferenser nedan.

contentFiles

(3.3+) En samling <files> element som identifierar innehållsfiler som ska inkluderas i det förbrukande projektet. Dessa filer anges med en uppsättning attribut som beskriver hur de ska användas i projektsystemet. Se Ange filer som ska inkluderas i paketet nedan.

files

Noden <package> kan innehålla en <files> nod som ett syskon till <metadata>, och ett <contentFiles> underordnat under <metadata>, för att ange vilka sammansättnings- och innehållsfiler som ska ingå i paketet. Mer information finns i Inkludera sammansättningsfiler och Inkludera innehållsfiler senare i det här avsnittet.

metadataattribut

minClientVersion

Anger den lägsta versionen av NuGet-klienten som kan installera det här paketet, framtvingat av nuget.exe och Visual Studio Package Manager. Detta används när paketet är beroende av .nuspec specifika funktioner i filen som lades till i en viss version av NuGet-klienten. Ett paket med developmentDependency attributet ska till exempel ange "2.8" för minClientVersion. På samma sätt bör ett paket med elementet contentFiles (se nästa avsnitt) anges minClientVersion till "3.3". Observera också att eftersom NuGet-klienter före 2.5 inte känner igen den här flaggan, vägrar de alltid att installera paketet oavsett vad minClientVersion som innehåller.

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

Ersättningstoken

När du skapar ett paket nuget pack ersätter kommandot $-avgränsade token i .nuspec filens <metadata> och <files> noderna med värden som kommer från antingen en projektfil eller pack kommandots -properties växel.

På kommandoraden anger du tokenvärden med nuget pack -properties <name>=<value>;<name>=<value>. Du kan till exempel använda en token som $owners$ och $desc$ i .nuspec och ange värdena vid förpackningstid enligt följande:

nuget pack MyProject.csproj -properties
    owners=janedoe,harikm,kimo,xiaop;desc="Awesome app logger utility"

Om du vill använda värden från ett projekt anger du de token som beskrivs i tabellen nedan (AssemblyInfo refererar till filen i Properties till exempel AssemblyInfo.cs eller AssemblyInfo.vb).

Om du vill använda dessa token kör nuget pack du med projektfilen i stället för bara .nuspec. När du till exempel använder följande kommando $id$ ersätts token och $version$ i en .nuspec fil med projektets AssemblyName och AssemblyVersion värdena:

nuget pack MyProject.csproj

När du har ett projekt skapar du vanligtvis den .nuspec initiala användningen nuget spec MyProject.csproj som automatiskt innehåller några av dessa standardtoken. Men om ett projekt saknar värden för nödvändiga .nuspec element misslyckas det nuget pack . Om du ändrar projektvärden måste du dessutom återskapa innan du skapar paketet. Detta kan göras bekvämt med packkommandots build växel.

Med undantag för $configuration$används värden i projektet i stället för alla tilldelade till samma token på kommandoraden.

Bevis Värdekälla Värde
$id$ Projektfil AssemblyName (rubrik) från projektfilen
$version$ AssemblyInfo AssemblyInformationalVersion om det finns, annars AssemblyVersion
$author$ AssemblyInfo AssemblyCompany
$title$ AssemblyInfo AssemblyTitle
$description$ AssemblyInfo AssemblyDescription
$copyright$ AssemblyInfo AssemblyCopyright
$configuration$ Sammansättnings-DLL Konfiguration som används för att skapa sammansättningen, som standard är Felsökning. Observera att du alltid använder -properties Configuration=Release på kommandoraden för att skapa ett paket med hjälp av en versionskonfiguration.

Token kan också användas för att matcha sökvägar när du inkluderar sammansättningsfiler och innehållsfiler. Token har samma namn som MSBuild-egenskaperna, vilket gör det möjligt att välja filer som ska inkluderas beroende på den aktuella byggkonfigurationen. Om du till exempel använder följande token i .nuspec filen:

<files>
    <file src="bin\$configuration$\$id$.pdb" target="lib\net40" />
</files>

Och du skapar en sammansättning vars AssemblyName är LoggingLibrary med konfigurationen Release i MSBuild, de resulterande raderna .nuspec i filen i paketet är följande:

<files>
    <file src="bin\Release\LoggingLibrary.pdb" target="lib\net40" />
</files>

Beroendeelement

Elementet <dependencies> i <metadata> innehåller valfritt antal element som identifierar andra paket som paketet på den översta nivån är beroende av <dependency> . Attributen för var och en <dependency> är följande:

Attribute Description
id (Krävs) Paket-ID:t för beroendet, till exempel "EntityFramework" och "NUnit", som är namnet på paketet nuget.org visas på en paketsida.
version (Krävs) Det intervall med versioner som är godtagbara som ett beroende. Se Paketversionshantering för exakt syntax. Flytande versioner stöds inte.
include En kommaavgränsad lista över inkluderings-/exkluderingstaggar (se nedan) som anger beroendet som ska ingå i det slutliga paketet. Standardvärdet är all.
exclude En kommaavgränsad lista över inkluderings-/exkluderingstaggar (se nedan) som anger beroendet som ska undantas i det slutliga paketet. Standardvärdet är build,analyzers som kan skrivas över. Men content/ ContentFiles utesluts också implicit i det slutliga paketet som inte kan skrivas över. Taggar som anges med exclude ha företräde framför de som anges med include. Till exempel är include="runtime, compile" exclude="compile" samma som include="runtime".

När du laddar upp ett paket till nuget.org är varje beroendes id attribut begränsat till 128 tecken och version attributet är begränsat till 256 tecken.

Ta med/exkludera tagg Berörda mappar i målet
contentFiles Content
runtime Körning, resurser och FrameworkAssemblies
compile Lib
build build (MSBuild props och mål)
infödd infödd
none Inga mappar
all Alla mappar

Följande rader anger till exempel beroenden för PackageA version 1.1.0 eller senare och PackageB version 1.x.

<dependencies>
    <dependency id="PackageA" version="1.1.0" />
    <dependency id="PackageB" version="[1,2)" />
</dependencies>

Följande rader anger beroenden för samma paket, men anger att inkludera mapparna och build mapparna contentFilesPackageA för och allt utom mapparna native och compile i PackageB"

<dependencies>
    <dependency id="PackageA" version="1.1.0" include="contentFiles, build" />
    <dependency id="PackageB" version="[1,2)" exclude="native, compile" />
</dependencies>

Viktigt!

När du skapar ett .nuspec från ett projekt med , nuget specinkluderas inte beroenden som finns i projektet automatiskt i den resulterande .nuspec filen. Använd nuget pack myproject.csproji stället och hämta .nuspec-filen från den genererade .nupkg-filen . Den här .nuspecen innehåller beroendena.

Beroendegrupper

Version 2.0+

Som ett alternativ till en enda platt lista kan beroenden anges enligt målprojektets ramverksprofil med hjälp <group> av element i <dependencies>.

Varje grupp har ett attribut med namnet targetFramework och innehåller noll eller fler <dependency> element. Dessa beroenden installeras tillsammans när målramverket är kompatibelt med projektets ramverksprofil.

Elementet <group> utan ett targetFramework attribut används som standard eller reservlista över beroenden. Se Målramverk för exakta ramverksidentifierare.

Viktigt!

Gruppformatet kan inte blandas med en platt lista.

Anmärkning

Formatet för Target Framework Moniker (TFM) som används i lib/ref mappen är annorlunda jämfört med TFM som används i dependency groups. Om målramverken som deklareras i dependencies group och lib/ref mappen .nuspec för filen inte har exakta matchningar pack , genererar kommandot NuGet Warning NU5128.

I följande exempel visas olika varianter av elementet <group> :

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

Explicita sammansättningsreferenser

Elementet <references> används av projekt med för packages.config att explicit ange de sammansättningar som målprojektet ska referera till när paketet används. Explicita referenser används vanligtvis endast för designtidssammansättningar. Mer information finns på sidan om hur du väljer sammansättningar som refereras av projekt för mer information.

Till exempel instruerar följande <references> element NuGet att endast xunit.dll lägga till referenser till och xunit.extensions.dll även om det finns ytterligare sammansättningar i paketet:

<references>
    <reference file="xunit.dll" />
    <reference file="xunit.extensions.dll" />
</references>

Referensgrupper

Som ett alternativ till en enda platt lista kan referenser anges enligt målprojektets ramverksprofil med hjälp <group> av element i <references>.

Varje grupp har ett attribut med namnet targetFramework och innehåller noll eller fler <reference> element. Dessa referenser läggs till i ett projekt när målramverket är kompatibelt med projektets ramverksprofil.

Elementet <group> utan ett targetFramework attribut används som standardlista eller reservlista med referenser. Se Målramverk för exakta ramverksidentifierare.

Viktigt!

Gruppformatet kan inte blandas med en platt lista.

I följande exempel visas olika varianter av elementet <group> :

<references>
    <group>
        <reference file="a.dll" />
    </group>

    <group targetFramework="net45">
        <reference file="b45.dll" />
    </group>

    <group targetFramework="netcore45">
        <reference file="bcore45.dll" />
    </group>
</references>

Ramverkssammansättningsreferenser

Ramverkssammansättningar är de som ingår i .NET-ramverket och som redan bör finnas i den globala sammansättningscachen (GAC) för en viss dator. Genom att identifiera dessa sammansättningar i elementet <frameworkAssemblies> kan ett paket se till att nödvändiga referenser läggs till i ett projekt om projektet inte redan har sådana referenser. Sådana sammansättningar ingår naturligtvis inte direkt i ett paket.

Elementet <frameworkAssemblies> innehåller noll eller fler <frameworkAssembly> element, som var och en anger följande attribut:

Attribute Description
assemblyName (Krävs) Det fullständigt kvalificerade sammansättningsnamnet.
targetFramework (Valfritt) Anger det målramverk som referensen gäller för. Om det utelämnas anger du att referensen gäller för alla ramverk. Se Målramverk för exakta ramverksidentifierare.

I följande exempel visas en referens till System.Net för alla målramverk och en referens till System.ServiceModel endast för .NET Framework 4.0:

<frameworkAssemblies>
    <frameworkAssembly assemblyName="System.Net"  />

    <frameworkAssembly assemblyName="System.ServiceModel" targetFramework="net40" />
</frameworkAssemblies>

Inklusive sammansättningsfiler

Om du följer de konventioner som beskrivs i Skapa ett paket behöver du inte uttryckligen ange en lista med filer i .nuspec filen. Kommandot nuget pack hämtar automatiskt de nödvändiga filerna.

Viktigt!

När ett paket installeras i ett projekt lägger NuGet automatiskt till sammansättningsreferenser till paketets DLL:er, exklusive de som namnges .resources.dll eftersom de antas vara lokaliserade satellitsammansättningar. Undvik därför att använda .resources.dll filer som annars innehåller viktig paketkod.

Om du vill kringgå det här automatiska beteendet och uttryckligen kontrollera vilka filer som ingår i ett paket placerar du ett <files> element som underordnat <package> (och ett syskon till <metadata>) och identifierar varje fil med ett separat <file> element. Till exempel:

<files>
    <file src="bin\Debug\*.dll" target="lib" />
    <file src="bin\Debug\*.pdb" target="lib" />
    <file src="tools\**\*.*" exclude="**\*.log" />
</files>

Med NuGet 2.x och tidigare, och projekt som använder packages.config, används elementet <files> också för att inkludera oföränderliga innehållsfiler när ett paket installeras. Med NuGet 3.3+ och projects PackageReference används elementet <contentFiles> i stället. Mer information finns i Inkludera innehållsfiler nedan.

Filelementattribut

Varje <file> element anger följande attribut:

Attribute Description
Src Platsen för filen eller filerna som ska inkluderas, med undantag som anges av attributet exclude . Sökvägen är relativ till .nuspec filen om inte en absolut sökväg har angetts. Jokertecknet * tillåts och det dubbla jokertecknet ** innebär en rekursiv mappsökning.
mål Den relativa sökvägen till mappen i paketet där källfilerna placeras, som måste börja med lib, content, buildeller tools. Se Skapa en .nuspec från en konventionsbaserad arbetskatalog.
Utesluta En semikolonavgränsad lista över filer eller filmönster som ska undantas från platsen src . Jokertecknet * tillåts och det dubbla jokertecknet ** innebär en rekursiv mappsökning.

Examples

Enkel sammansättning

Source file:
    library.dll

.nuspec entry:
    <file src="library.dll" target="lib" />

Packaged result:
    lib\library.dll

Enskild sammansättning som är specifik för ett målramverk

Source file:
    library.dll

.nuspec entry:
    <file src="assemblies\net40\library.dll" target="lib\net40" />

Packaged result:
    lib\net40\library.dll

Uppsättning DLL:er med ett jokertecken

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:er för olika ramverk

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

Exkluderande filer

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)

Inkludera innehållsfiler

Innehållsfiler är oföränderliga filer som ett paket måste inkludera i ett projekt. Eftersom de är oföränderliga är de inte avsedda att ändras av det förbrukande projektet. Exempel på innehållsfiler är:

  • Bilder som är inbäddade som resurser
  • Källfiler som redan har kompilerats
  • Skript som måste ingå i byggutdata för projektet
  • Konfigurationsfiler för paketet som behöver ingå i projektet men som inte behöver några projektspecifika ändringar

Innehållsfiler ingår i ett paket med elementet <files> och anger content mappen i target attributet. Sådana filer ignoreras dock när paketet installeras i ett projekt med Hjälp av PackageReference, som i stället använder elementet <contentFiles> .

För maximal kompatibilitet med förbrukande projekt anger ett paket helst innehållsfilerna i båda elementen.

Använda filelementet för innehållsfiler

För innehållsfiler använder du helt enkelt samma format som för sammansättningsfiler, men anger content som basmapp i target attributet som visas i följande exempel.

Grundläggande innehållsfiler

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

Innehållsfiler med katalogstruktur

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

Innehållsfil som är specifik för ett målramverk

Source file:
    css\cool\style.css

.nuspec entry
    <file src="css\cool\style.css" target="Content" />

Packaged result:
    content\style.css

Innehållsfil kopierad till en mapp med punkt i namn

I det här fallet ser NuGet att tillägget i target inte matchar tillägget i src och behandlar därmed den delen av namnet i target som en mapp:

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

Innehållsfiler utan tillägg

Om du vill inkludera filer utan tillägg använder du * jokertecken eller ** jokertecken:

Source file:
    flags\installed

.nuspec entry:
    <file src="flags\**" target="flags" />

Packaged result:
    flags\installed

Innehållsfiler med djup sökväg och djupt mål

I det här fallet, eftersom filnamnstilläggen för käll- och målmatchningen, antar NuGet att målet är ett filnamn och inte en mapp:

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

Byta namn på en innehållsfil i paketet

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

Exkluderande filer

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)

Använda contentFiles-elementet för innehållsfiler

NuGet 4.0+ med PackageReference

Som standard placerar ett paket innehåll i en contentFiles mapp (se nedan) och nuget pack innehåller alla filer i mappen med hjälp av standardattribut. I det här fallet är det inte nödvändigt att inkludera en contentFiles nod alls .nuspec .

För att styra vilka filer som ingår, anger elementet <contentFiles> är en samling <files> element som identifierar de exakta filer som ingår.

Dessa filer anges med en uppsättning attribut som beskriver hur de ska användas i projektsystemet:

Attribute Description
inkludera (Krävs) Platsen för filen eller filerna som ska inkluderas, med undantag som anges av attributet exclude . Sökvägen är relativ till contentFiles mappen om inte en absolut sökväg har angetts. Jokertecknet * tillåts och det dubbla jokertecknet ** innebär en rekursiv mappsökning.
Utesluta En semikolonavgränsad lista över filer eller filmönster som ska undantas från platsen src . Jokertecknet * tillåts och det dubbla jokertecknet ** innebär en rekursiv mappsökning.
buildAction Byggåtgärden som ska tilldelas innehållsobjektet för MSBuild, till exempel Content, None, Embedded Resource, Compileosv. Standardvärdet är Compile.
copyToOutput Ett booleskt värde som anger om innehållsobjekt ska kopieras till utdatamappen build (eller publicera). Standardvärdet är falskt.
platta ut Ett booleskt värde som anger om innehållsobjekt ska kopieras till en enda mapp i kompileringsutdata (sant) eller för att bevara mappstrukturen i paketet (false). Den här flaggan fungerar bara när flaggan copyToOutput är inställd på true. Standardvärdet är falskt.

När du installerar ett paket tillämpar NuGet de underordnade elementen <contentFiles> i uppifrån och ned. Om flera poster matchar samma fil tillämpas alla poster. Posten längst upp åsidosätter de lägre posterna om det finns en konflikt för samma attribut.

Struktur för paketmappar

Paketprojektet ska strukturera innehåll med hjälp av följande mönster:

/contentFiles/{codeLanguage}/{TxM}/{any?}
  • codeLanguages kan vara cs, vb, fs, any, eller gemener som motsvarar en viss $(ProjectLanguage)
  • TxM är en moniker för juridiska målramverk som NuGet stöder (se Målramverk).
  • Alla mappstrukturer kan läggas till i slutet av den här syntaxen.

Till exempel:

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

Tomma mappar kan använda _._ för att välja bort att tillhandahålla innehåll för vissa kombinationer av språk och TxM, till exempel:

/contentFiles/vb/any/code.vb
/contentFiles/cs/any/_._

Exempel på contentFiles-avsnitt

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

Referensgrupper för ramverk

Endast version 5.1+ wih PackageReference

Ramverksreferenser är ett .NET Core-koncept som representerar delade ramverk som WPF eller Windows Forms. Genom att ange ett delat ramverk säkerställer paketet att alla dess ramverksberoenden ingår i referensprojektet.

Varje <group> element kräver ett targetFramework attribut och noll eller fler <frameworkReference> element.

I följande exempel visas en nuspec som genererats för ett .NET Core WPF-projekt. Observera att handredigering av nuspecs som innehåller ramverksreferenser inte rekommenderas. Överväg att använda målpaketet i stället, vilket automatiskt kommer att härleda dem från projektet.

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

Exempel på nuspec-filer

En enkel .nuspec som inte anger beroenden eller filer

<?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 med beroenden

<?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 med filer

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

A .nuspec med ramverkssammansättningar

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

I det här exemplet installeras följande för specifika projektmål:

  • . NET4 ->System.Web, System.Net
  • . NET4-klientprofil –>System.Net
  • Silverlight 3 ->System.Json
  • WindowsPhone –>Microsoft.Devices.Sensors