Delen via


NuGet inpakken en terugzetten als MSBuild doelstellingen

NuGet 4.0+

Met de PackageReference-indelingNuGet kan 4.0+ alle manifestmetagegevens rechtstreeks in een projectbestand opslaan in plaats van een afzonderlijk .nuspec bestand te gebruiken.

Met MSBuild 15.1+ is NuGet ook een volwaardige MSBuild met de doelen pack en restore zoals hieronder beschreven. Met deze targets kunt u werken zoals u met iedere andere NuGet taak of target zou doen. Zie Een NuGet-pakket maken met MSBuild voor instructies over het maken van een NuGet-pakket.MSBuild. (Voor NuGet 3.x en eerder gebruikt u in plaats daarvan het pakket en herstelopdrachten via de NuGet CLI.)

Doelbouwvolgorde

Omdat pack en restoreMSBuild-doelen zijn, kunt u deze openen om uw werkstroom te verbeteren. Stel dat u uw pakket wilt kopiëren naar een netwerkshare nadat u het pakket hebt verpakt. U kunt dit doen door het volgende toe te voegen aan uw projectbestand:

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

Op dezelfde manier kunt u een MSBuild taak schrijven, uw eigen doel definiëren en eigenschappen gebruiken binnen de NuGet taakMSBuild.

Opmerking

$(OutputPath) is relatief en verwacht dat je de opdracht uitvoert vanuit de hoofddirectory van het project.

verpakkingsdoel

Voor .NET-projecten die de PackageReference indeling gebruiken, gebruikt u msbuild -t:pack invoer uit het projectbestand om te gebruiken bij het maken van een NuGet pakket.

Projecten zonder SDK-stijl moeten het pakket NuGet.Build.Tasks.Pack installeren wanneer u Visual Studio 2022 of eerder gebruikt. U wordt aangeraden dit pakket te verwijderen wanneer u een upgrade uitvoert naar Visual Studio 2026 om ervoor te zorgen dat uw project de nieuwste packfuncties en oplossingen voor fouten kan gebruiken.

In de volgende tabel worden de MSBuild eigenschappen beschreven die kunnen worden toegevoegd aan een projectbestand binnen het eerste <PropertyGroup> knooppunt. U kunt deze bewerkingen eenvoudig in Visual Studio 2017 en hoger maken door met de rechtermuisknop op het project te klikken en 'Bewerk {project_name}' te selecteren in het snelmenu. Voor het gemak wordt de tabel ingedeeld op basis van de equivalente eigenschap in een .nuspec bestand.

Opmerking

Owners en Summary eigenschappen van .nuspec worden niet ondersteund met MSBuild.

Kenmerk/nuspec waarde MSBuild Eigenschap Verstek Opmerkingen
Id PackageId $(AssemblyName) $(AssemblyName) van MSBuild
Version PackageVersion Versie Dit is semver compatibel, bijvoorbeeld 1.0.0, 1.0.0-betaof 1.0.0-beta-00345. Wordt standaard Version ingesteld als deze niet is ingesteld.
VersionPrefix VersionPrefix empty Instelling van PackageVersion overschrijft VersionPrefix
VersionSuffix VersionSuffix empty Instelling van PackageVersion overschrijft VersionSuffix
Authors Authors Gebruikersnaam van de huidige gebruiker Een door puntkomma's gescheiden lijst met auteurs van pakketten die overeenkomen met de profielnamen op nuget.org. Deze worden weergegeven in de NuGet galerie op nuget.org en worden gebruikt voor kruisverwijzingspakketten van dezelfde auteurs.
Owners N/A Niet aanwezig in nuspec
Title Title $(PackageId) Een gebruikersvriendelijke titel van het pakket die doorgaans wordt gebruikt in de gebruikersinterface, zoals op nuget.org en de Package Manager in Visual Studio.
Description Description "Pakketbeschrijving" Een lange beschrijving voor de assembly-modules. Als PackageDescription niet is opgegeven, wordt deze eigenschap ook gebruikt als de beschrijving van het pakket.
Copyright Copyright empty Copyrightgegevens voor het pakket.
RequireLicenseAcceptance PackageRequireLicenseAcceptance false Een Booleaanse waarde die aangeeft of de client de consument moet vragen de pakketlicentie te accepteren voordat het pakket wordt geïnstalleerd.
license PackageLicenseExpression empty <license type="expression">Komt overeen met . Zie Een licentie-expressie of een licentiebestand inpakken.
license PackageLicenseFile empty Pad naar een licentiebestand in het pakket als u een aangepaste licentie of een licentie gebruikt waaraan geen SPDX-id is toegewezen. U moet het licentiebestand waarnaar wordt verwezen expliciet inpakken. <license type="file">Komt overeen met . Zie Een licentie-expressie of een licentiebestand inpakken.
LicenseUrl PackageLicenseUrl empty PackageLicenseUrl is verouderd. Gebruik PackageLicenseExpression of PackageLicenseFile in plaats daarvan.
ProjectUrl PackageProjectUrl empty
Icon PackageIcon empty Een pad naar een afbeelding in het pakket die moet worden gebruikt als pakketpictogram. U moet het afbeeldingsbestand met het pictogram waarnaar wordt verwezen expliciet inpakken. Zie Een afbeeldingsbestand van een pictogram inpakken en icon metagegevens voor meer informatie.
IconUrl PackageIconUrl empty PackageIconUrl is afgeschaft ten gunste van PackageIcon. Voor de beste downlevel-ervaring moet u PackageIconUrl specificeren naast PackageIcon.
Readme PackageReadmeFile empty U moet het leesmij-bestand waarnaar wordt verwezen expliciet inpakken.
Tags PackageTags empty Een door puntkomma's gescheiden lijst met tags die het pakket aanwijzen.
ReleaseNotes PackageReleaseNotes empty Releaseopmerkingen voor het pakket.
Repository/Url RepositoryUrl empty Opslagplaats-URL die wordt gebruikt om broncode te klonen of op te halen. Voorbeeld: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
Repository/Type RepositoryType empty Opslagplaatstype. Voorbeelden: git (standaard), tfs.
Repository/Branch RepositoryBranch empty Optionele informatie over de opslagplaatsbranch. RepositoryUrl moet ook worden opgegeven dat deze eigenschap moet worden opgenomen. Voorbeeld: master (NuGet 4.7.0+).
Repository/Commit RepositoryCommit empty Optionele opslagplaats doorvoer of wijzigingenset om aan te geven op welke bron het pakket is gebouwd. RepositoryUrl moet ook worden opgegeven dat deze eigenschap moet worden opgenomen. Voorbeeld: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
PackageType <PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> Geeft het beoogde gebruik van het pakket aan. Pakkettypen gebruiken dezelfde indeling als pakket-id's en worden gescheiden door ;. Pakkettypen kunnen versiebeheer hebben door een , en een Version tekenreeks toe te voegen. Zie Een pakkettype instellen NuGet (NuGet3.5.0+).
Summary Niet ondersteund

doelinvoer inpakken

Vastgoed Description
IsPackable Een Booleaanse waarde die aangeeft of het project kan worden verpakt. De standaardwaarde is true.
SuppressDependenciesWhenPacking Stel in op true om pakketafhankelijkheden van het gegenereerde NuGet pakket te onderdrukken.
PackageVersion Hiermee geeft u de versie op die het resulterende pakket heeft. Accepteert alle vormen van NuGet versietekenreeks. De standaardwaarde is de waarde van $(Version), dat wil gezegd, van de eigenschap Version in het project.
PackageId Hiermee geeft u de naam voor het resulterende pakket. Als dit niet is opgegeven, wordt standaard de pack of de naam van de AssemblyName map gebruikt als de naam van het pakket.
PackageDescription Een lange beschrijving van het pakket voor weergave van de gebruikersinterface.
Authors Een door puntkomma's gescheiden lijst met auteurs van pakketten die overeenkomen met de profielnamen op nuget.org. Deze worden weergegeven in de NuGet galerie op nuget.org en worden gebruikt voor kruisverwijzingspakketten van dezelfde auteurs.
Description Een lange beschrijving voor de assembly-modules. Als PackageDescription niet is opgegeven, wordt deze eigenschap ook gebruikt als de beschrijving van het pakket.
Copyright Copyrightgegevens voor het pakket.
PackageRequireLicenseAcceptance Een Booleaanse waarde die aangeeft of de client de consument moet vragen de pakketlicentie te accepteren voordat het pakket wordt geïnstalleerd. De standaardwaarde is false.
DevelopmentDependency Een Booleaanse waarde die aangeeft of het pakket is gemarkeerd als alleen voor ontwikkeling, waardoor het pakket niet wordt opgenomen als een afhankelijkheid in andere pakketten. Met PackageReference (NuGet 4.8+) houdt deze vlag ook in dat assets tijdens compilatie worden uitgesloten van compilatie. Zie DevelopmentDependency-ondersteuning voor PackageReference voor meer informatie.
PackageLicenseExpression Een SPDX-licentie-id of -expressie, bijvoorbeeld Apache-2.0. Zie Een licentie-expressie of een licentiebestand inpakken voor meer informatie.
PackageLicenseFile Pad naar een licentiebestand in het pakket als u een aangepaste licentie of een licentie gebruikt waaraan geen SPDX-id is toegewezen.
PackageLicenseUrl PackageLicenseUrl is verouderd. Gebruik PackageLicenseExpression of PackageLicenseFile in plaats daarvan.
PackageProjectUrl
PackageIcon Specificeert het pad naar het pakketpictogram, ten opzichte van de root van het pakket. Zie Een afbeeldingsbestand van een pictogram inpakken voor meer informatie.
PackageReleaseNotes Releaseopmerkingen voor het pakket.
PackageReadmeFile Leesmij voor het pakket.
PackageTags Een door puntkomma's gescheiden lijst met tags die het pakket aanwijzen.
PackageOutputPath Bepaalt het uitvoerpad waarin het verpakte pakket wordt verwijderd. De standaardinstelling is $(OutputPath).
IncludeSymbols Deze Booleaanse waarde geeft aan of het pakket een extra symbolenpakket moet maken wanneer het project is verpakt. De indeling van het symboolpakket wordt bepaald door de SymbolPackageFormat eigenschap. Zie IncludeSymbols voor meer informatie.
IncludeSource Deze Booleaanse waarde geeft aan of het pakketproces een bronpakket moet maken. Het bronpakket bevat de broncode van de bibliotheek en PDB-bestanden. Bronbestanden worden onder de src/ProjectName map in het resulterende pakketbestand geplaatst. Zie IncludeSource voor meer informatie.
PackageType
IsTool Hiermee geeft u op of alle uitvoerbestanden worden gekopieerd naar de map hulpprogramma's in plaats van de lib-map . Zie IsTool voor meer informatie.
RepositoryUrl Opslagplaats-URL die wordt gebruikt om broncode te klonen of op te halen. Voorbeeld: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git.
RepositoryType Opslagplaatstype. Voorbeelden: git (standaard), tfs.
RepositoryBranch Optionele informatie over de opslagplaatsbranch. RepositoryUrl moet ook worden opgegeven dat deze eigenschap moet worden opgenomen. Voorbeeld: master (NuGet 4.7.0+).
RepositoryCommit Optionele opslagplaats doorvoer of wijzigingenset om aan te geven op welke bron het pakket is gebouwd. RepositoryUrl moet ook worden opgegeven dat deze eigenschap moet worden opgenomen. Voorbeeld: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+).
SymbolPackageFormat Hiermee wordt het formaat van het symbolenpakket gespecificeerd. Als 'symbols.nupkg' wordt een verouderd symbolenpakket aangemaakt met de extensie .symbols.nupkg, dat PDB's, DLL's en andere uitvoerbestanden bevat. Als 'snupkg' wordt een snupkg-symboolpakket gemaakt met de draagbare PDBs. De standaardwaarde is 'symbols.nupkg'.
NoPackageAnalysis Hiermee geeft u op dat pack pakketanalyse niet moet worden uitgevoerd nadat het pakket is gebouwd.
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.
IncludeBuildOutput Deze Booleaanse waarde geeft aan of de build-uitvoerassembly's moeten worden verpakt in het .nupkg-bestand of niet.
IncludeContentInPack Deze Booleaanse waarde geeft aan of items met een type Content items automatisch worden opgenomen in het resulterende pakket. De standaardwaarde is true.
BuildOutputTargetFolder Hiermee geeft u de map op waar de uitvoerassembly's moeten worden geplaatst. De uitvoerassembly's (en andere uitvoerbestanden) worden gekopieerd naar hun overeenkomstige framework-mappen. Zie Uitvoerassemblies voor meer informatie.
ContentTargetFolders Hiermee specificeert u de standaardlocatie waar alle inhoudsbestanden naartoe moeten als er voor hen geen PackagePath is opgegeven. De standaardwaarde is 'content;contentFiles'. Zie Inclusief inhoud in een pakket voor meer informatie.
NuspecFile Relatief of absoluut pad naar het .nuspec bestand dat wordt gebruikt voor het inpakken. Indien opgegeven, wordt deze uitsluitend gebruikt voor verpakkingsinformatie en alle informatie in de projecten wordt niet gebruikt. Voor meer informatie, zie Verpakking met behulp van een .nuspec.
NuspecBasePath Basispad voor het .nuspec bestand. Voor meer informatie, zie Verpakking met behulp van een .nuspec.
NuspecProperties Door puntkomma's gescheiden lijst met sleutel-waardeparen. Voor meer informatie, zie Verpakking met behulp van een .nuspec.

packscenario's

Afhankelijkheden onderdrukken

Als u pakketafhankelijkheden van het gegenereerde NuGet pakket wilt onderdrukken, stelt u SuppressDependenciesWhenPackingtrue in op welke manier alle afhankelijkheden van het gegenereerde nupkg-bestand kunnen worden overgeslagen.

PackageIconUrl

PackageIconUrl is verouderd ten gunste van de PackageIcon eigenschap. NuGet Vanaf 5.3 en Visual Studio 2019 versie 16.3 wordt pack de NU5048-waarschuwing gegenereerd als alleen de metagegevens van het pakket worden opgegevenPackageIconUrl.

PackageIcon

Aanbeveling

Als u compatibiliteit met eerdere versies wilt behouden met clients en bronnen die PackageIcon nog niet ondersteunen, geeft u zowel PackageIcon als PackageIconUrl op. Visual Studio biedt ondersteuning PackageIcon voor pakketten die afkomstig zijn van een bron op basis van mappen.

Afbeeldingsbestand van een pictogram inpakken

Wanneer u een afbeeldingsbestand van een pictogram inpakt, gebruikt u de eigenschap PackageIcon om het pad naar het pictogrambestand relatief aan de hoofdmap van het pakket op te geven. Zorg er bovendien voor dat het bestand is opgenomen in het pakket. De grootte van het afbeeldingsbestand is beperkt tot 1 MB. Ondersteunde bestandsindelingen zijn JPEG en PNG. We raden een afbeeldingsresolutie van 128x128 aan.

Voorbeeld:

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

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

Voorbeeld van pakketpictogram.

Bekijk voor het nuspec equivalent een nuspec referentie voor het pictogram.

PackageReadmeFile

Ondersteund met NuGet 5.10.0 preview 2.NET / SDK 5.0.300 en hoger

Wanneer u een leesmij-bestand inpakt, moet u de PackageReadmeFile eigenschap gebruiken om het 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).

Voorbeeld:

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

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

Bekijk de referentie voor nuspec in de nuspec voor het equivalent.

Uitvoerassemblies

nuget pack kopieert uitvoerbestanden met extensies .exe, .dll, .xml, .winmd, .json en .pri. De uitvoerbestanden die worden gekopieerd, zijn afhankelijk van wat MSBuild het BuiltOutputProjectGroup doel biedt.

Er zijn twee MSBuild eigenschappen die u kunt gebruiken in uw projectbestand of opdrachtregel om te bepalen waar uitvoerassembly's naartoe gaan:

  • IncludeBuildOutput: Een Booleaanse waarde die bepaalt of de build-uitvoerassembly's moeten worden opgenomen in het pakket.
  • BuildOutputTargetFolder: Geeft de map op waarin de outputassemblies geplaatst moeten worden. De uitvoerassembly's (en andere uitvoerbestanden) worden gekopieerd naar hun overeenkomstige framework-mappen.

Softwarepakketverwijzingen

Zie Pakketverwijzingen in Project-bestanden.

Referenties tussen projecten

Project-naar-projectverwijzingen worden standaard beschouwd als NuGet pakketverwijzingen. Voorbeeld:

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

U kunt ook de volgende metagegevens toevoegen aan uw projectreferentie:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Inhoud opnemen in een pakket

Als u inhoud wilt opnemen, voegt u extra metagegevens toe aan het bestaande <Content> item. Standaard wordt alles van het type 'Inhoud' opgenomen in het pakket, tenzij u overschrijft met vermeldingen als de volgende:

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

Standaard wordt alles toegevoegd aan de hoofdmap van de content en contentFiles\any\<target_framework> map in een pakket en blijft de relatieve mapstructuur behouden, tenzij u een pakketpad opgeeft:

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

Als u al uw inhoud naar alleen één specifieke hoofdmap of meerdere specifieke hoofdmappen wilt kopiëren (in plaats van naar zowel content als contentFiles), kunt u de eigenschap MSBuildContentTargetFolders gebruiken, die standaard is ingesteld op 'content;contentFiles', maar op andere mapnamen kan worden gezet. Houd er rekening mee dat door alleen 'contentFiles' op te geven in ContentTargetFolders, bestanden onder contentFiles\any\<target_framework> of contentFiles\<language>\<target_framework> worden geplaatst op basis van buildAction.

PackagePath kan een door puntkomma's gescheiden set doelpaden zijn. Als u een leeg pakketpad opgeeft, wordt het bestand toegevoegd aan de hoofdmap van het pakket. Het volgende wordt bijvoorbeeld toegevoegd libuv.txt aan content\myfiles, content\samplesen de hoofdmap van het pakket:

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

Er is ook een MSBuild eigenschap $(IncludeContentInPack), die standaard is ingesteld op true. Als dit is ingesteld false op een project, wordt de inhoud van dat project niet opgenomen in het nuget-pakket.

Andere pakketspecifieke metagegevens die u kunt instellen voor elk van de bovenstaande items omvatten <PackageCopyToOutput> en <PackageFlatten>, waarmee de waarden CopyToOutput en Flatten worden ingesteld voor de vermelding contentFiles in de uitvoer nuspec.

Opmerking

Naast inhoudsitems kunnen de <Pack> en <PackagePath> metagegevens ook worden ingesteld op bestanden met een buildactie van Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource of None.

Als u de bestandsnaam aan uw pakketpad wilt toevoegen wanneer u globbing-patronen gebruikt, moet uw pakketpad eindigen met het teken voor de mapseparator. Anders wordt het pakketpad behandeld als het volledige pad, inclusief de bestandsnaam.

IncludeSymbolen

Bij gebruik MSBuild -t:pack -p:IncludeSymbols=trueworden de bijbehorende .pdb bestanden samen met andere uitvoerbestanden (.dll, .exe, .winmd, .xml, .json) .prigekopieerd. Houd er rekening mee dat met de instelling IncludeSymbols=true een normaal pakket en een symboolpakket worden gemaakt.

IncludeSource

Dit is hetzelfde als IncludeSymbols, behalve dat het bronbestanden samen met .pdb bestanden kopieert. Alle bestanden van het type Compile worden naar src\<ProjectName>\ gekopieerd, waarbij de relatieve padmapstructuur in het resulterende pakket behouden blijft. Hetzelfde gebeurt ook voor bronbestanden van elk ProjectReference met TreatAsPackageReference ingesteld op false.

Als een bestand van het type Compiler zich buiten de projectmap bevindt, wordt het net toegevoegd aan src\<ProjectName>\.

Een licentie-expressie of een licentiebestand inpakken

Wanneer u een licentie-expressie gebruikt, gebruikt u de PackageLicenseExpression eigenschap. Zie Licentie-expressie voorbeeld voor een voorbeeld.

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

Zie de NuGet voor meer informatie over licentie-expressies en licenties die door .org worden geaccepteerd.

Wanneer u een licentiebestand inpakt, gebruikt u de PackageLicenseFile-eigenschap om het pakketpad op te geven ten opzichte van de hoofdmap van het pakket. Zorg er bovendien voor dat het bestand is opgenomen in het pakket. Voorbeeld:

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

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

Zie Voorbeeld van licentiebestand voor een voorbeeld.

Opmerking

Slechts één van PackageLicenseExpression, PackageLicenseFileen PackageLicenseUrl kan tegelijk worden opgegeven.

Een bestand inpakken zonder extensie

In sommige scenario's, zoals bij het inpakken van een licentiebestand, wilt u mogelijk een bestand zonder extensie opnemen. Om historische redenen NuGet behandelt & MSBuild paden zonder extensie als mappen.

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

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

Bestand zonder extensievoorbeeld.

IsTool

Wanneer u MSBuild -t:pack -p:IsTool=truealle uitvoerbestanden gebruikt, zoals opgegeven in het scenario Uitvoerassembly's , worden gekopieerd naar de tools map in plaats van de lib map. Houd er rekening mee dat dit verschilt van een DotNetCliTool waarde die wordt opgegeven door het in te stellen in PackageType het .csproj bestand.

Verpakken met behulp van een .nuspec bestand

Hoewel het raadzaam is om alle eigenschappen op te nemen die zich meestal in het .nuspec bestand in het projectbestand bevinden, kunt u ervoor kiezen om een .nuspec bestand te gebruiken om uw project in te pakken. U moet het project nog steeds herstellen voordat u een nuspec bestand kunt inpakken. (Een SDK-project bevat standaard de pakketdoelen.)

Het doelframework van het projectbestand is irrelevant en wordt niet gebruikt bij het inpakken van een nuspec. De volgende drie MSBuild eigenschappen zijn relevant voor verpakking met behulp van:.nuspec

  1. NuspecFile: relatief of absoluut pad naar het .nuspec bestand dat wordt gebruikt voor verpakking.
  2. NuspecProperties: een door puntkomma's gescheiden lijst met sleutel-waardeparen. Vanwege de manier waarop MSBuild opdrachtregelparsering werkt, moeten meerdere eigenschappen als volgt worden opgegeven: -p:NuspecProperties="key1=value1;key2=value2".
  3. NuspecBasePath: basispad voor het .nuspec bestand.

Als u dotnet.exe uw project wilt verpakken, gebruik dan een opdracht als het volgende:

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

Als u MSBuild uw project wilt verpakken, gebruik dan een opdracht als het volgende:

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

Houd er rekening mee dat het inpakken van een nuspec met dotnet.exe of msbuild standaard leidt tot het bouwen van het project. Dit kan worden vermeden door de eigenschap door te geven --no-build aan dotnet.exe, wat het equivalent is van de instelling <NoBuild>true</NoBuild> in uw projectbestand, samen met de instelling <IncludeBuildOutput>false</IncludeBuildOutput> in het projectbestand.

Een voorbeeld van een .csproj-bestand voor het inpakken van een nuspec bestand is:

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

Geavanceerde uitbreidingspunten voor het maken van aangepast pakket

Het pack doel biedt twee uitbreidingspunten die worden uitgevoerd in de interne, doelframeworkspecifieke build. De extensiepunten ondersteunen onder andere specifieke inhoud en assembly's van het doelframework in een pakket:

  • TargetsForTfmSpecificBuildOutput doel: Gebruiken voor bestanden in de lib map of een map die is opgegeven met behulp van BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage doel: Gebruiken voor bestanden buiten de BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutput

Schrijf een aangepast doel en geef het op als de waarde van de $(TargetsForTfmSpecificBuildOutput) eigenschap. Voor bestanden die standaard naar de BuildOutputTargetFolder (lib) moeten gaan, moet het doel deze bestanden naar de ItemGroup BuildOutputInPackage schrijven en de volgende twee metagegevenswaarden instellen:

  • FinalOutputPath: het absolute pad van het bestand; indien niet opgegeven, wordt de identiteit gebruikt om het bronpad te evalueren.
  • TargetPath: (Optioneel) Stel in wanneer het bestand in een submap lib\<TargetFramework> moet worden geplaatst, zoals satellietassembly's die onder hun respectieve cultuurmappen vallen. De standaardwaarde is de naam van het bestand.

Voorbeeld:

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

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

TargetsForTfmSpecificContentInPackage

Schrijf een aangepast doel en geef het op als de waarde van de $(TargetsForTfmSpecificContentInPackage) eigenschap. Als u bestanden in het pakket wilt opnemen, moet het doel deze bestanden naar de ItemGroup TfmSpecificPackageFile schrijven en de volgende optionele metagegevens instellen:

  • PackagePath: Pad waar het bestand moet worden weergegeven in het pakket. NuGet geeft een waarschuwing als er meer dan één bestand wordt toegevoegd aan hetzelfde pakketpad.
  • BuildAction: De buildactie die moet worden toegewezen aan het bestand, is alleen vereist als het pakketpad zich in de contentFiles map bevindt. De standaardwaarde is 'Geen'.

Een voorbeeld:

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

hersteldoel

MSBuild -t:restore (welke nuget restore en dotnet restore gebruikt met .NET Core-projecten), herstelt pakketten waarnaar wordt verwezen in het projectbestand als volgt:

  1. Alle project-naar-projectverwijzingen lezen
  2. Lees de projecteigenschappen om de tussenliggende map en doelplatforms te vinden
  3. Gegevens doorsturen MSBuild naar NuGet.Build.Tasks.dll
  4. Herstel uitvoeren
  5. Pakketten downloaden
  6. Assetsbestand, doelen en props schrijven

Het restore target werkt voor projecten die de PackageReference-indeling gebruiken. MSBuild 16.5+ biedt ook opt-in-ondersteuning voor de packages.config indeling.

Opmerking

Het restore doel mag niet worden uitgevoerd in combinatie met het build doel.

Eigenschappen herstellen

Aanvullende herstelinstellingen kunnen afkomstig zijn van MSBuild eigenschappen in het projectbestand. Waarden kunnen ook worden ingesteld vanaf de opdrachtregel met behulp van de -p: schakeloptie (zie voorbeelden hieronder).

Vastgoed Description
RestoreSources Een door puntkomma's gescheiden lijst van pakketbronnen.
RestorePackagesPath Pad naar de map voor gebruikerspakketten.
RestoreDisableParallel Beperk downloads tot één voor één.
RestoreConfigFile Pad naar een Nuget.Config bestand dat moet worden toegepast.
RestoreNoHttpCache Als dit waar is, vermijdt het gebruik van http-gecachte pakketten. Zie De globale pakketten en cachemappen beheren.
RestoreIgnoreFailedSources Als dit waar is, worden mislukte of ontbrekende pakketbronnen genegeerd.
RestoreFallbackFolders Terugvalmappen, die op dezelfde manier worden gebruikt als de map met gebruikerspakketten.
RestoreAdditionalProjectSources Aanvullende bronnen die u tijdens het herstellen kunt gebruiken.
RestoreAdditionalProjectFallbackFolders Extra terugvalmappen die tijdens het herstellen moeten worden gebruikt.
RestoreAdditionalProjectFallbackFoldersExcludes Sluit reservefolders uit die zijn opgegeven in RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFile Pad naar NuGet.Build.Tasks.dll.
RestoreGraphProjectInput Door puntkomma's gescheiden lijst met projecten die moeten worden hersteld, die absolute paden moeten bevatten.
RestoreUseSkipNonexistentTargets Wanneer de projecten via MSBuild worden verzameld, wordt bepaald of ze met behulp van de SkipNonexistentTargets optimalisatie worden verzameld. Als dit niet is ingesteld, wordt standaard ingesteld op true. Het gevolg is een gedrag waarbij snel wordt gefaald wanneer de doelen van een project niet kunnen worden geïmporteerd.
MSBuildProjectExtensionsPath Uitvoermap, standaard ingesteld op BaseIntermediateOutputPath en de obj map.
RestoreForce In projecten op basis van PackageReference dwingt u alle afhankelijkheden om te worden opgelost, zelfs als de laatste herstelbewerking is geslaagd. Deze vlag specificeren is vergelijkbaar met het verwijderen van het project.assets.json bestand. Hierdoor wordt de http-cache niet overgeslagen.
RestorePackagesWithLockFile Hiermee kiest u voor het gebruik van een lock-bestand.
RestoreLockedMode Voer herstel uit in de vergrendelde modus. Dit betekent dat herstel de afhankelijkheden niet opnieuw evalueert.
NuGetLockFilePath Een aangepaste locatie voor het vergrendelingsbestand. De standaardlocatie bevindt zich naast het project en heeft de naam packages.lock.json.
RestoreForceEvaluate Hiermee dwingt u het herstellen om de afhankelijkheden opnieuw te compileren en het vergrendelingsbestand bij te werken zonder enige waarschuwing.
RestorePackagesConfig Een opt-in schakelaar waarmee projecten met packages.config herstellen mogelijk is. Alleen ondersteuning via MSBuild -t:restore.
RestoreRepositoryPath packages.config alleen. Hiermee specificeert u de map waarin de pakketten moeten worden hersteld. SolutionDirectory wordt gebruikt als dit niet is opgegeven.
RestoreUseStaticGraphEvaluation Een opt-in-switch voor het gebruik van statische grafiekevaluatie MSBuild in plaats van de standaardevaluatie. Statische grafiekevaluatie is een experimentele functie die aanzienlijk sneller is bij grote repositories en oplossingen.
RestoreUseLegacyDependencyResolver Een opt-out optie voor het gebruik van de klassieke afhankelijkheids-resolver. NuGetDe implementatie van de afhankelijkheids resolver is herschreven in de release 6.12. Deze schakelaar dwingt om het vorige algoritme te gebruiken.

De ExcludeRestorePackageImports eigenschap is een interne eigenschap die wordt gebruikt door NuGet. Het mag niet worden gewijzigd of ingesteld in bestanden MSBuild .

Voorbeelden

Opdrachtregel:

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

Projectbestand:

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

Uitvoer herstellen

Door Herstellen worden de volgende bestanden aan de map obj build toegevoegd:

Bestand Description
project.assets.json Bevat de afhankelijkheidsgrafiek van alle pakketverwijzingen.
{projectName}.projectFileExtension.nuget.g.props Verwijzingen naar MSBuild props in pakketten
{projectName}.projectFileExtension.nuget.g.targets Verwijzingen naar MSBuild doelen in pakketten

Herstellen en bouwen met één MSBuild opdracht

Vanwege het feit dat NuGet pakketten kan herstellen die MSBuild doelen en props verstoren, worden de herstel- en build-evaluaties uitgevoerd met diverse globale eigenschappen. Dit betekent dat het volgende zich onvoorspelbaar en vaak onjuist zal gedragen.

msbuild -t:restore,build

In plaats daarvan is de aanbevolen benadering:

msbuild -t:build -restore

Dezelfde logica is van toepassing op andere doelen die vergelijkbaar zijn met build.

PackageReference en packages.config projecten herstellen met MSBuild

Met MSBuild 16,5+ worden packages.config ook ondersteund voor msbuild -t:restore.

msbuild -t:restore -p:RestorePackagesConfig=true

Opmerking

packages.config herstellen is alleen beschikbaar met MSBuild 16.5+en niet met dotnet.exe

Herstellen met MSBuild statische grafiekevaluatie

Opmerking

Met MSBuild 16.6+ NuGet is een experimentele functie toegevoegd voor het gebruik van statische grafiekevaluatie vanaf de opdrachtregel waarmee de hersteltijd voor grote opslagplaatsen aanzienlijk wordt verbeterd.

msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true

U kunt deze ook inschakelen door de eigenschap in te stellen in een Directory.Build.Props.

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

Opmerking

Vanaf Visual Studio 2019.x en NuGet 5.x wordt deze functie beschouwd als experimenteel en opt-in. Volg NuGet/Home#9803 voor meer informatie over wanneer deze functie standaard wordt ingeschakeld.

Statische grafiekherstel wijzigt het msbuild-onderdeel van herstel, het lezen en evalueren van het project, maar niet het herstelalgoritmen. Het herstelalgoritme is hetzelfde voor alle NuGet hulpprogramma's (NuGet.exe, MSBuild.exe, dotnet.exe en Visual Studio).

In zeer weinig scenario's kan het herstellen van een statische grafiek zich anders gedragen dan het huidige herstelproces. Bepaalde gedeclareerde PackageReferences of ProjectReferences kunnen ontbreken.

Als u uw gedachten wilt vereenvoudigen, kunt u, als eenmalige controle, overwegen om tijdens de migratie naar statische grafiekherstel het volgende uit te voeren:

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

NuGet mag geen wijzigingen rapporteren. Als u een discrepantie ziet, kunt u een probleem indienen bij NuGet/Home.

Eén bibliotheek vervangen binnen een herstelgrafiek

Als een herstelbewerking de verkeerde assembly bevat, is het mogelijk om die standaardkeuze voor pakketten uit te sluiten en te vervangen door uw eigen keuze. Begin met een hoogste niveau PackageReference en sluit alle assets uit:

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

Voeg vervolgens uw eigen verwijzing toe aan de juiste lokale kopie van het DLL-bestand:

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