Dela via


NuGet packa och återställa som MSBuild mål

NuGet 4.0+

Med PackageReference-formatetNuGet kan 4.0+ lagra alla manifestmetadata direkt i en projektfil i stället för att använda en separat .nuspec fil.

Med MSBuild 15,1+ är NuGet också en förstaklassig komponent med pack och restore mål enligt beskrivningen nedan. Med de här målen kan du arbeta med NuGet på samma sätt som med andra MSBuild aktiviteter eller mål. Anvisningar för hur du skapar ett NuGet paket med hjälp av MSBuildfinns i Skapa ett NuGet paket med .MSBuild (För NuGet 3.x och tidigare använder du paket - och återställningskommandona via CLI i NuGet stället.)

Prioriterad byggordning

Eftersom pack och restore är MSBuild mål kan du komma åt dem för att förbättra arbetsflödet. Tänk dig att du vill kopiera paketet till en nätverksdelning efter att du har packat det. Du kan göra det genom att lägga till följande i projektfilen:

<Target Name="CopyPackage" AfterTargets="Pack">
  <Copy
    SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
    DestinationFolder="\\myshare\packageshare\"
    />
</Target>

På samma sätt kan du skriva en MSBuild uppgift, skriva ett eget mål och använda NuGet egenskaper i MSBuild aktiviteten.

Anmärkning

$(OutputPath) är relativ och förväntar sig att du kör kommandot från projektroten.

paketmål

För .NET-projekt som använder PackageReference-formatet hämtar msbuild -t:pack indata från projektfilen för att använda denna i skapandet av ett NuGet-paket.

Icke-SDK-liknande projekt måste installera NuGet. Build.Tasks.Pack-paket när du använder Visual Studio 2022 eller tidigare. Vi rekommenderar att du avinstallerar det här paketet när du uppgraderar till Visual Studio 2026 för att säkerställa att projektet kan använda de senaste paketfunktionerna och felkorrigeringarna.

I följande tabell beskrivs de MSBuild egenskaper som kan läggas till i en projektfil inom den första <PropertyGroup> noden. Du kan enkelt göra dessa ändringar i Visual Studio 2017 och senare genom att högerklicka på projektet och välja Redigera {project_name} på snabbmenyn. För enkelhetens skull ordnas tabellen efter motsvarande egenskap i en .nuspec fil.

Anmärkning

Owners och Summary egenskaper från .nuspec stöds inte med MSBuild.

Attribut/nuspec värde MSBuild Egenskap Förinställning Noteringar
Id PackageId $(AssemblyName) $(AssemblyName) från MSBuild
Version PackageVersion Utgåva Detta är semverkompatibelt, till exempel 1.0.0, 1.0.0-betaeller 1.0.0-beta-00345. Standardvärdet är Version om det inte har angetts.
VersionPrefix VersionPrefix tom När man anger PackageVersion ersätter VersionPrefix
VersionSuffix VersionSuffix tom Genom att ange PackageVersion skrivs VersionSuffix över
Authors Authors Användarnamn för den aktuella användaren En semikolonavgränsad lista över paketens författare som matchar profilnamn på nuget.org. Dessa visas i galleriet på NuGet nuget.org och används för att korsreferera paket av samma författare.
Owners N/A Finns inte i nuspec
Title Title $(PackageId) En mänskligt vänlig titel på paketet, som vanligtvis används i användargränssnittet och visas på nuget.org samt i Paket hanteraren i Visual Studio.
Description Description "Paketbeskrivning" En lång beskrivning av monteringen. Om PackageDescription inte anges används även den här egenskapen som beskrivning av paketet.
Copyright Copyright tom Upphovsrättsinformation för paketet.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false Ett booleskt värde som anger om klienten måste uppmana konsumenten att godkänna paketlicensen innan paketet installeras.
license PackageLicenseExpression tom Motsvarar <license type="expression">. Se Paketering av ett licensuttryck eller en licensfil.
license PackageLicenseFile tom Sökväg till en licensfil i paketet om du använder en anpassad licens eller en licens som inte har tilldelats någon SPDX-identifierare. Du måste uttryckligen packa den angivna licensfilen. Motsvarar <license type="file">. Se Paketering av ett licensuttryck eller en licensfil.
LicenseUrl PackageLicenseUrl tom PackageLicenseUrl är inaktuell. Använd PackageLicenseExpression eller PackageLicenseFile i stället.
ProjectUrl PackageProjectUrl tom
Icon PackageIcon tom En sökväg till en bild i paketet som ska användas som paketikon. Du måste tydligt packa den refererade ikonbildfilen. Mer information finns i Paketering av en ikonbildfil och icon metadata.
IconUrl PackageIconUrl tom PackageIconUrl är inaktuell till förmån för PackageIcon. För bästa prestandanivå bör du dock ange PackageIconUrl utöver PackageIcon.
Readme PackageReadmeFile tom Du måste uttryckligen packa den refererade readme-filen.
Tags PackageTags tom En semikolonavgränsad lista med taggar som anger paketet.
ReleaseNotes PackageReleaseNotes tom Versionsanteckningar för paketet.
Repository/Url RepositoryUrl tom Lagringsplats-URL som används för att klona eller hämta källkod. Exempel: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
Repository/Type RepositoryType tom Lagringsplatstyp. Exempel: git (standard), tfs.
Repository/Branch RepositoryBranch tom Valfria uppgifter om repositoryns gren. RepositoryUrl måste också anges för att den här egenskapen ska inkluderas. Exempel: master (NuGet 4.7.0+).
Repository/Commit RepositoryCommit tom Valfri lagringsplatsincheckning eller ändringsuppsättning för att ange vilken källa paketet skapades mot. RepositoryUrl måste också anges för att den här egenskapen ska inkluderas. Exempel: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> Anger paketets avsedda användning. Pakettyper använder samma format som paket-ID:t och avgränsas av ;. Pakettyper kan versionshanteras genom att lägga till en ,- och en Version-sträng. Se Anvisningar för att ange en NuGet pakettyp (NuGet 3.5.0+).
Summary Stöds inte

måldata för paket

Fastighet Description
IsPackable Ett booleskt värde som anger om projektet kan packas. Standardvärdet är true.
SuppressDependenciesWhenPacking Ange till true för att förhindra paketberoenden från det genererade NuGet paketet.
PackageVersion Anger vilken version det resulterande paketet ska ha. Accepterar alla former av NuGet versionssträngar. Standardvärdet är värdet $(Version)för egenskapen Version i projektet.
PackageId Anger namnet på det resulterande paketet. Om pack inte anges kommer operationen som förval att använda namnet på AssemblyName eller katalognamnet som namnet på paketet.
PackageDescription En lång beskrivning av paketet för UI-visning.
Authors En semikolonavgränsad lista över paketens författare som matchar profilnamn på nuget.org. Dessa visas i galleriet på NuGet nuget.org och används för att korsreferera paket av samma författare.
Description En lång beskrivning av monteringen. Om PackageDescription inte anges används även den här egenskapen som beskrivning av paketet.
Copyright Upphovsrättsinformation för paketet.
PackageRequireLicenseAcceptance Ett booleskt värde som anger om klienten måste uppmana konsumenten att godkänna paketlicensen innan paketet installeras. Standardvärdet är false.
DevelopmentDependency Ett booleskt värde som anger om paketet är markerat som ett utvecklingsberoende, vilket förhindrar att paketet inkluderas som ett beroende i andra paket. Med PackageReference (NuGet 4.8+) innebär denna flagga också att kompileringstillgångar utesluts från kompileringen. Mer information finns i Support för DevelopmentDependency för PackageReference.
PackageLicenseExpression En SPDX-licensidentifierare eller ett uttryck, till exempel Apache-2.0. Mer information finns i Paketering av ett licensuttryck eller en licensfil.
PackageLicenseFile Sökväg till en licensfil i paketet om du använder en anpassad licens eller en licens som inte har tilldelats någon SPDX-identifierare.
PackageLicenseUrl PackageLicenseUrl är inaktuell. Använd PackageLicenseExpression eller PackageLicenseFile i stället.
PackageProjectUrl
PackageIcon Anger paketikonsökvägen i förhållande till paketets rot. Mer information finns i Packa en ikonbildfil.
PackageReleaseNotes Versionsanteckningar för paketet.
PackageReadmeFile Användardokumentation för paketet.
PackageTags En semikolonavgränsad lista med taggar som anger paketet.
PackageOutputPath Bestämmer den utdatasökväg där det packade paketet kommer att placeras. Standard är $(OutputPath).
IncludeSymbols Det här booleska värdet anger om paketet ska skapa ytterligare ett symbolpaket när projektet är packat. Symbolpaketets format styrs av egenskapen SymbolPackageFormat . Mer information finns i IncludeSymbols.
IncludeSource Det här booleska värdet anger om paketprocessen ska skapa ett källpaket. Källpaketet innehåller bibliotekets källkod samt PDB-filer. Källfiler placeras under src/ProjectName katalogen i den resulterande paketfilen. Mer information finns i IncludeSource.
PackageType
IsTool Anger om alla utdatafiler kopieras till verktygsmappen i stället för lib-mappen . Mer information finns i IsTool.
RepositoryUrl Lagringsplats-URL som används för att klona eller hämta källkod. Exempel: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
RepositoryType Lagringsplatstyp. Exempel: git (standard), tfs.
RepositoryBranch Valfri information om lagringsplatsens gren. RepositoryUrl måste också anges för att den här egenskapen ska inkluderas. Exempel: master (NuGet 4.7.0+).
RepositoryCommit Valfri lagringsplatsincheckning eller ändringsuppsättning för att ange vilken källa paketet skapades mot. RepositoryUrl måste också anges för att den här egenskapen ska inkluderas. Exempel: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
SymbolPackageFormat Formatet för symbolpaketet anges. Om "symbols.nupkg" skapas ett äldre symbolpaket med tillägget .symbols.nupkg som innehåller PDF-filer, DLL:er och andra utdatafiler. Om "snupkg" skapas ett snupkg-symbolpaket som innehåller de bärbara PDF-filerna. Standardvärdet är "symbols.nupkg".
NoPackageAnalysis Anger som pack inte ska köra paketanalys efter att paketet har skapats.
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.
IncludeBuildOutput Det här booleska värdet anger om kompileringsutdatasammansättningarna ska packas i .nupkg-filen eller inte.
IncludeContentInPack Det här booleska värdet anger om några objekt som har en typ av Content inkluderas i det resulterande paketet automatiskt. Standardvärdet är true.
BuildOutputTargetFolder Anger den mapp där utdatasammansättningarna ska placeras. Utdatasammansättningarna (och andra utdatafiler) kopieras till respektive ramverksmappar. Mer information finns i Utdatasammansättningar.
ContentTargetFolders Anger standardplatsen för var alla innehållsfiler ska placeras om de inte har angetts. Standardvärdet är "content; contentFiles". Mer information finns i Inkludera innehåll i ett paket.
NuspecFile Relativ eller absolut sökväg till filen .nuspec som används för packning. Om den anges används den uteslutande för paketeringsinformation och all information i projekten används inte. För mer information, se Paketering med hjälp av en .nuspec.
NuspecBasePath Grundläggande sökväg för .nuspec filen. För mer information, se Paketering med hjälp av en .nuspec.
NuspecProperties Semikolonavgränsad lista över key=value-par. För mer information, se Paketering med hjälp av en .nuspec.

paketscenarier

Förhindra beroenden

Om du vill förhindra paketberoenden från det genererade NuGet paketet, ställ in SuppressDependenciesWhenPacking till true vilket gör att du kan hoppa över alla beroenden från den genererade nupkg-filen.

PackageIconUrl

PackageIconUrl ersätts av egenskapen PackageIcon. Från och med NuGet 5.3 och Visual Studio 2019 version 16.3 pack genererar NU5048-varningen om paketmetadata endast anger PackageIconUrl.

PackageIcon

Tips/Råd

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

Packa en ikonbildfil

När du packar en ikonbildfil använder du PackageIcon egenskapen för att ange ikonfilens sökväg i förhållande till paketets rot. Kontrollera dessutom att filen ingår i paketet. Bildfilens storlek är begränsad till 1 MB. Filformat som stöds är JPEG och PNG. Vi rekommenderar en bildupplösning på 128x128.

Till exempel:

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

Exempel på paketikon.

För motsvarigheten nuspec, ta en titt på nuspec referensen för ikonen.

PackageReadmeFile

Stöds med NuGet förhandsversionen av 5.10.0 2.NET / SDK 5.0.300 och senare

När du packar en readme-fil måste du använda PackageReadmeFile egenskapen 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).

Till exempel:

<PropertyGroup>
    ...
    <PackageReadmeFile>readme.md</PackageReadmeFile>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="docs\readme.md" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

För motsvarande nuspec tar du en titt på nuspec-referensen för README.

Utdatasammansättningar

nuget pack kopierar utdatafiler med tilläggen .exe, .dll, .xml, .winmd, .jsonoch .pri. Vilka utdatafiler som kopieras beror på vad MSBuild tillhandahåller från BuiltOutputProjectGroup mål.

Det finns två MSBuild egenskaper som du kan använda i projektfilen eller kommandoraden för att styra vart utdatasammansättningar ska gå:

  • IncludeBuildOutput: Ett booleskt värde som avgör om kompilerade utdatasammansättningar ska ingå i paketet.
  • BuildOutputTargetFolder: Anger den mapp där utdatasammansättningarna ska placeras. Utdatasammansättningarna (och andra utdatafiler) kopieras till respektive ramverksmappar.

Paketreferenser

Se Paketreferenser i Project Files.

Projekt till projektreferenser

Projekt-till-projektreferenser betraktas som standard som NuGet paketreferenser. Till exempel:

<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>

Du kan också lägga till följande metadata i projektreferensen:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Inkludera innehåll i ett paket

Om du vill inkludera innehåll lägger du till extra metadata i det befintliga <Content> objektet. Som standard ingår allt av typen "Innehåll" i paketet om du inte åsidosätter med poster som följande:

<Content Include="..\win7-x64\libuv.txt">
 <Pack>false</Pack>
</Content>

Som standardinställning läggs allt till i roten av content och contentFiles\any\<target_framework> mappen inom ett paket och bevarar den relativa mappstrukturen, såvida du inte anger en paketsökväg:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles\</PackagePath>
</Content>

Om du bara vill kopiera allt innehåll till en viss rotmapp (i stället för content och contentFiles båda) kan du använda MSBuild egenskapen ContentTargetFolders, som standard är "innehåll; contentFiles" men kan anges till andra mappnamn. Observera att om du bara anger "contentFiles" i ContentTargetFolders placeras filer under contentFiles\any\<target_framework> eller contentFiles\<language>\<target_framework> baserat på buildAction.

PackagePath kan vara en semikolonavgränsad uppsättning målsökvägar. Om en tom paketsökväg anges, skulle filen läggas till i paketets rot. Följande lägger libuv.txt till content\myfiles, content\samples och rooten för paketet:

<Content Include="..\win7-x64\libuv.txt">
  <Pack>true</Pack>
  <PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>

Det finns också en MSBuild egenskap $(IncludeContentInPack) som standard är true. Om detta är inställt false på för ett projekt inkluderas inte innehållet från det projektet i nuget-paketet.

Andra paketspecifika metadata som du kan ange för något av ovanstående objekt innehåller <PackageCopyToOutput> och <PackageFlatten> som anger CopyToOutput och Flatten värden för contentFiles posten i utdata nuspec.

Anmärkning

Förutom innehållselement kan <Pack> och <PackagePath>-metadata även ställas in på filer med byggåtgärden Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource eller None.

För att paket ska kunna lägga till filnamnet i paketsökvägen när du använder globbningsmönster måste paketsökvägen sluta med mappavgränsartecknet, annars behandlas paketsökvägen som den fullständiga sökvägen inklusive filnamnet.

InkluderaSymboler

När du använder MSBuild -t:pack -p:IncludeSymbols=truekopieras motsvarande .pdb filer tillsammans med andra utdatafiler (.dll, , .exe.winmd, .xml, .json, .pri). Observera att inställningen IncludeSymbols=true skapar ett vanligt paket och ett symbolpaket.

IncludeSource

Detta är samma som IncludeSymbols, förutom att det kopierar källfiler tillsammans med .pdb filer också. Alla filer av typen Compile kopieras över till src\<ProjectName>\, med bevarande av den relativa mappstrukturen i det resulterande paketet. Detsamma gäller för källfiler för alla ProjectReference som har TreatAsPackageReference inställd på false.

Om en fil av typen Kompilera ligger utanför projektmappen läggs den bara till src\<ProjectName>\i .

Packa ett licensuttryck eller en licensfil

Använd egenskapen PackageLicenseExpression när du använder ett licensuttryck. Ett exempel finns i Exempel på licensuttryck.

<PropertyGroup>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

Mer information om licensuttryck och licenser som godkänns av NuGet.org finns i licensmetadata.

När du packar en licensfil använder du PackageLicenseFile egenskapen för att ange paketsökvägen i förhållande till paketets rot. Kontrollera dessutom att filen ingår i paketet. Till exempel:

<PropertyGroup>
    <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>

<ItemGroup>
    <None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>

Ett exempel finns i Exempel på licensfil.

Anmärkning

Endast en av PackageLicenseExpression, PackageLicenseFileoch PackageLicenseUrl kan anges i taget.

Paketering av en fil utan tillägg

I vissa scenarier, till exempel när du packar en licensfil, kanske du vill inkludera en fil utan ett tillägg. Av historiska skäl NuGet behandlar & MSBuild sökvägar utan ett tillägg som kataloger.

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0</TargetFrameworks>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
  </PropertyGroup>

  <ItemGroup>
    <None Include="LICENSE" Pack="true" PackagePath=""/>
  </ItemGroup>  

Fil utan tilläggsexempel.

IsTool

När du använder MSBuild -t:pack -p:IsTool=truekopieras alla utdatafiler som anges i scenariot Utdatasammansättningar till tools mappen i stället för mappen lib . Observera att detta skiljer sig från ett DotNetCliTool som anges genom att ange PackageType i .csproj -filen.

Paketering med hjälp av en .nuspec fil

Även om vi rekommenderar att du inkluderar alla egenskaper som vanligtvis finns i .nuspec filen i projektfilen i stället, kan du välja att använda en .nuspec fil för att packa projektet. Du måste fortfarande återställa projektet innan du kan packa en nuspec fil. (Ett SDK-projekt innehåller paketmålen som standard.)

Målramverket för projektfilen är irrelevant och används inte när du packar en nuspec. Följande tre MSBuild egenskaper är relevanta för packning med hjälp av en .nuspec:

  1. NuspecFile: relativ eller absolut sökväg till filen .nuspec som används för packning.
  2. NuspecProperties: en semikolonavgränsad lista över key=value-par. På grund av hur MSBuild kommandoradsparsing fungerar måste flera egenskaper anges på följande sätt: -p:NuspecProperties="key1=value1;key2=value2".
  3. NuspecBasePath: Bassökväg för .nuspec filen.

Om du använder dotnet.exe för att packa projektet använder du ett kommando som liknar följande:

dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Om du använder MSBuild för att packa projektet använder du ett kommando som liknar följande:

msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path> 

Observera att om du packar en nuspec med hjälp av dotnet.exe eller msbuild leder det också till att projektet byggs som standard. Detta kan undvikas genom att skicka --no-build egenskapen till dotnet.exe, vilket motsvarar inställningen <NoBuild>true</NoBuild> i projektfilen, tillsammans med inställningen <IncludeBuildOutput>false</IncludeBuildOutput> i projektfilen.

Ett exempel på en .csproj-fil för att packa en nuspec fil är:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <NoBuild>true</NoBuild>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <NuspecFile>PATH_TO_NUSPEC_FILE</NuspecFile>
    <NuspecProperties>add nuspec properties here</NuspecProperties>
    <NuspecBasePath>optional to provide</NuspecBasePath>
  </PropertyGroup>
</Project>

Avancerade tilläggspunkter för att skapa ett anpassat paket

Målet pack innehåller två tilläggspunkter som körs i den inre målramverkets specifika version. Tilläggspunkterna stöder att innefatta innehåll och assemblys specifikt för målramverket i ett paket.

  • TargetsForTfmSpecificBuildOutput target: Använd för filer i lib mappen eller en mapp som har angetts med hjälp av BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage target: Används för filer utanför BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutput

Skriv ett anpassat mål och ange det som värdet för $(TargetsForTfmSpecificBuildOutput) egenskapen. För filer som behöver gå in i BuildOutputTargetFolder (lib som standard) ska målet skriva filerna till ItemGroup BuildOutputInPackage och ange följande två metadatavärden:

  • FinalOutputPath: Filens absoluta sökväg; Om den inte anges används identiteten för att utvärdera källsökvägen.
  • TargetPath: (Valfritt) Ange när filen behöver gå in i en undermapp i lib\<TargetFramework> , till exempel satellitsammansättningar som går under respektive kulturmapp. Defaultvärdet är filens namn.

Exempel:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>

<Target Name="GetMyPackageFiles">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
        <TargetPath>cs</TargetPath>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

TargetsForTfmSpecificContentInPackage

Skriv ett anpassat mål och ange det som värdet för $(TargetsForTfmSpecificContentInPackage) egenskapen. För alla filer som ska inkluderas i paketet bör målet skriva dessa filer till ItemGroup TfmSpecificPackageFile och ange följande valfria metadata:

  • PackagePath: Sökväg där filen ska matas ut i paketet. NuGet utfärdar en varning om fler än en fil läggs till i samma paketsökväg.
  • BuildAction: Byggåtgärden som ska tilldelas till filen krävs endast om paketsökvägen finns i contentFiles mappen. Standardvärdet är "Ingen".

Ett exempel:

<PropertyGroup>
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);CustomContentTarget</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>

<Target Name="CustomContentTarget">
  <ItemGroup>
    <TfmSpecificPackageFile Include="abc.txt">
      <PackagePath>mycontent/$(TargetFramework)</PackagePath>
    </TfmSpecificPackageFile>
    <TfmSpecificPackageFile Include="Extensions/ext.txt" Condition="'$(TargetFramework)' == 'net46'">
      <PackagePath>net46content</PackagePath>
    </TfmSpecificPackageFile>  
  </ItemGroup>
</Target>  

återställ måltillstånd

MSBuild -t:restore (som nuget restore och dotnet restore använder med .NET Core-projekt), återställer paket som refereras i projektfilen enligt följande:

  1. Läs alla projekt-till-projekt-referenser
  2. Läs projektegenskaperna för att hitta den mellanliggande mappen och målramverken
  3. Skicka MSBuild data till NuGet.Build.Tasks.dll
  4. Utför återställning
  5. Ladda ned paket
  6. Skriv assets-fil, target-filer och props-filer

Målet restore fungerar för projekt med formatet PackageReference. MSBuild 16.5+ har även opt-in-support för packages.config formatet.

Anmärkning

Målet restoreska inte köras i kombination med build målet.

Återställa egenskaper

Ytterligare återställningsinställningar kan komma från MSBuild egenskaper i projektfilen. Värden kan också anges från kommandoraden med växeln -p: (se Exempel nedan).

Fastighet Description
RestoreSources Semikolonavgränsad lista över paketkällor.
RestorePackagesPath Mappsökväg för användarpaket.
RestoreDisableParallel Begränsa nedladdningar till en i taget.
RestoreConfigFile Sökväg till Nuget.Config-fil som ska användas.
RestoreNoHttpCache Om sant, undviker att använda HTTP-cachelagrade paket. Se Hantera globala paket och cachemappar.
RestoreIgnoreFailedSources Om det är sant ignorerar du misslyckade eller saknade paketkällor.
RestoreFallbackFolders Reservmappar som används på samma sätt som mappen för användarpaket används.
RestoreAdditionalProjectSources Ytterligare källor som ska användas under återställningen.
RestoreAdditionalProjectFallbackFolders Ytterligare reservmappar som ska användas under återställningen.
RestoreAdditionalProjectFallbackFoldersExcludes Exkluderar reservmappar som anges i RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile Sökväg till NuGet.Build.Tasks.dll.
RestoreGraphProjectInput Semikolonavgränsad lista över projekt som ska återupprättas, vilken bör innehålla fullständiga sökvägar.
RestoreUseSkipNonexistentTargets När projekten samlas in via MSBuild den avgör om de samlas in med hjälp av optimeringen SkipNonexistentTargets . När den inte har angetts är standardvärdet true. Konsekvensen är ett felsnabbt beteende när ett projekts mål inte kan importeras.
MSBuildProjectExtensionsPath Utdatamapp, standardmässigt till BaseIntermediateOutputPath-mappen och obj-mappen.
RestoreForce I projekt som baseras på PackageReference tvingar detta alla beroenden att lösas, även om den senaste återställningen var lyckad. Att ange den här flaggan liknar att ta bort project.assets.json-filen. Detta kringgår inte http-cachen.
RestorePackagesWithLockFile Väljer att använda en låsfil.
RestoreLockedMode Kör återställning i låst läge. Det innebär att återställningen inte omvärderar beroendena.
NuGetLockFilePath En anpassad plats för låsfilen. Standardplatsen ligger bredvid projektet och heter packages.lock.json.
RestoreForceEvaluate Tvingar återställningen att omkomputera beroendena och uppdatera låsfilen utan förvarning.
RestorePackagesConfig En opt-in-omkopplare som återställer projekt med packages.config. Endast stöd med MSBuild -t:restore.
RestoreRepositoryPath endast packages.config. Anger den paketkatalog som paketen ska återställas till. SolutionDirectory används om det inte anges.
RestoreUseStaticGraphEvaluation En opt-in-växel för att använda utvärdering av statiska diagram MSBuild i stället för standardutvärderingen. Utvärdering av statiska diagram är en experimentell funktion som är betydligt snabbare för stora lagringsplatser och lösningar.
RestoreUseLegacyDependencyResolver Ett undantag för att använda den äldre beroendelösaren. NuGetImplementeringen av beroendelösaren skrevs om i 6.12-versionen. Den här växeln tvingar den tidigare algoritmen att användas.

Egenskapen ExcludeRestorePackageImports är en intern egenskap som används av NuGet. Den bör inte ändras eller anges i några MSBuild filer.

Examples

Kommandorad:

msbuild -t:restore -p:RestoreConfigFile=<path>

Projektfil:

<PropertyGroup>
    <RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>

Återställa utdata

Återställning skapar följande filer i byggmappen obj :

File Description
project.assets.json Innehåller beroendediagrammet för alla paketreferenser.
{projectName}.projectFileExtension.nuget.g.props Referenser till MSBuild rekvisita som finns i paket
{projectName}.projectFileExtension.nuget.g.targets Referenser till MSBuild mål som finns i paket

Återställ och bygg med ett MSBuild kommando

På grund av det faktum att NuGet kan återställa paket som tar ner MSBuild mål och rekvisita, körs återställnings- och byggutvärderingarna med olika globala egenskaper. Det innebär att följande kommer att ha ett oförutsägbart och ofta felaktigt beteende.

msbuild -t:restore,build

Den rekommenderade metoden är i stället:

msbuild -t:build -restore

Samma logik gäller för andra mål som liknar build.

Återställa PackageReference- och packages.config-projekt med MSBuild

Med MSBuild 16,5+ stöds packages.config också för msbuild -t:restore.

msbuild -t:restore -p:RestorePackagesConfig=true

Anmärkning

packages.config återställning är endast tillgängligt med MSBuild 16.5+, och inte med dotnet.exe

Återställning med MSBuild statisk granskning av grafer

Anmärkning

Med MSBuild 16.6+ NuGet har lagt till en experimentell funktion för att använda statisk grafutvärdering från kommandoraden som avsevärt förbättrar återställningstiden för stora lagringsplatser.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

Du kan också aktivera den genom att ange egenskapen i en Directory.Build.Props.

<Project>
  <PropertyGroup>
    <RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
  </PropertyGroup>
</Project>

Anmärkning

Från och med Visual Studio 2019.x och NuGet 5.x anses den här funktionen vara experimentell och valfri att aktivera. Följ NuGet/Home#9803 för mer information om när den här funktionen ska aktiveras som standard.

Återställning av en statisk graf förändrar den del av msbuild som tillhör återställningen, projektläsningen och utvärderingen, men inte återställningsalgoritmen! Återställningsalgoritmen är densamma för alla NuGet verktyg (NuGet.exe, MSBuild.exe, dotnet.exe och Visual Studio).

I mycket få scenarier kan återställning av statiska diagram fungera annorlunda än den aktuella återställningen och vissa deklarerade PackageReferences eller ProjectReferences kanske saknas.

För att underlätta för dig kan du som en engångskontroll, när du migrerar till återställning av statiska diagram, överväga att köra:

msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore

NuGet bör inte rapportera några ändringar. Om du ser en avvikelse anger du ett problem på NuGet/Home.

Ersätta ett bibliotek från ett återställningsdiagram

Om en återställning ger fel sammansättning är det möjligt att undanta standardalternativet för paket och ersätta det med ditt eget val. Först med en toppnivå PackageReferenceexkluderar du alla tillgångar:

<PackageReference Include="Newtonsoft.Json" Version="9.0.1">
  <ExcludeAssets>All</ExcludeAssets>
</PackageReference>

Lägg sedan till din egen referens till lämplig lokal kopia av DLL:en:

<Reference Include="Newtonsoft.Json.dll" />