Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
-
NuspecFile: relatief of absoluut pad naar het.nuspecbestand dat wordt gebruikt voor verpakking. -
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". -
NuspecBasePath: basispad voor het.nuspecbestand.
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:
-
TargetsForTfmSpecificBuildOutputdoel: Gebruiken voor bestanden in delibmap of een map die is opgegeven met behulp vanBuildOutputTargetFolder. -
TargetsForTfmSpecificContentInPackagedoel: Gebruiken voor bestanden buiten deBuildOutputTargetFolder.
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 submaplib\<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 decontentFilesmap 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:
- Alle project-naar-projectverwijzingen lezen
- Lees de projecteigenschappen om de tussenliggende map en doelplatforms te vinden
- Gegevens doorsturen MSBuild naar NuGet.Build.Tasks.dll
- Herstel uitvoeren
- Pakketten downloaden
- 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" />