Sada NuGet Pack a obnovení jako cíle MSBuildNuGet pack and restore as MSBuild targets

NuGet 4.0 +NuGet 4.0+

Ve formátu PackageReference NuGet 4.0 + může ukládat všechna metadata manifestu přímo do souboru projektu místo použití samostatného souboru .nuspec.With the PackageReference format, NuGet 4.0+ can store all manifest metadata directly within a project file rather than using a separate .nuspec file.

Pomocí nástroje MSBuild 15.1 + nástroj NuGet je také první třídou občana MSBuild s pack a cíli restore, jak je popsáno níže.With MSBuild 15.1+, NuGet is also a first-class MSBuild citizen with the pack and restore targets as described below. Tyto cíle vám umožňují pracovat s balíčky NuGet stejně jako s ostatními úlohami nebo cíli MSBuild.These targets allow you to work with NuGet as you would with any other MSBuild task or target. Pokyny k vytvoření balíčku NuGet pomocí nástroje MSBuild najdete v tématu Vytvoření balíčku NuGet pomocí nástroje MSBuild.For instructions creating a NuGet package using MSBuild, see Create a NuGet package using MSBuild. (Pro NuGet 3. x a starší použijte místo toho příkazy Pack a obnovení prostřednictvím rozhraní příkazového řádku NuGet.)(For NuGet 3.x and earlier, you use the pack and restore commands through the NuGet CLI instead.)

Pořadí cílového sestaveníTarget build order

Vzhledem k tomu, že pack a restore jsou cíle nástroje MSBuild, můžete k nim přistupovat, abyste mohli vylepšit pracovní postup.Because pack and restore are MSBuild targets, you can access them to enhance your workflow. Řekněme například, že chcete po sbalení balíčku zkopírovat do sdílené síťové složky.For example, let’s say you want to copy your package to a network share after packing it. To lze provést přidáním následujícího do souboru projektu:You can do that by adding the following in your project file:

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

Podobně můžete napsat úlohu MSBuild, napsat vlastní cíl a využít vlastnosti NuGet v úloze MSBuild.Similarly, you can write an MSBuild task, write your own target and consume NuGet properties in the MSBuild task.

Poznámka

$(OutputPath) je relativní a očekává, že spouštíte příkaz z kořenového adresáře projektu.$(OutputPath) is relative and expects that you are running the command from the project root.

cíl balíčkupack target

Pro .NET Standard projekty pomocí formátu PackageReference pomocí msbuild -t:pack kreslí vstupy ze souboru projektu, které se použijí při vytváření balíčku NuGet.For .NET Standard projects using the PackageReference format, using msbuild -t:pack draws inputs from the project file to use in creating a NuGet package.

Následující tabulka popisuje vlastnosti MSBuild, které lze přidat do souboru projektu v prvním <PropertyGroup> uzlu.The table below describes the MSBuild properties that can be added to a project file within the first <PropertyGroup> node. Tyto úpravy můžete snadno upravit v aplikaci Visual Studio 2017 a novějším kliknutím pravým tlačítkem myši na projekt a výběrem možnosti Upravit {PROJECT_NAME} v místní nabídce.You can make these edits easily in Visual Studio 2017 and later by right-clicking the project and selecting Edit {project_name} on the context menu. Pro přehlednost je tabulka uspořádána podle odpovídající vlastnosti v souboru.nuspec.For convenience the table is organized by the equivalent property in a .nuspec file.

Všimněte si, že nástroj MSBuild nepodporuje vlastnosti Owners a Summary z .nuspec.Note that the Owners and Summary properties from .nuspec are not supported with MSBuild.

Hodnota atributu/NuSpecAttribute/NuSpec Value Vlastnost MSBuildMSBuild Property VýchozíDefault PoznámkyNotes
IdId PackageIdPackageId AssemblyNameAssemblyName $ (AssemblyName) z MSBuild$(AssemblyName) from MSBuild
VersionVersion PackageVersionPackageVersion VersionVersion To je semver kompatibilní, například "1.0.0", "1.0.0-beta" nebo "1.0.0-beta-00345"This is semver compatible, for example “1.0.0”, “1.0.0-beta”, or “1.0.0-beta-00345”
VersionPrefixVersionPrefix PackageVersionPrefixPackageVersionPrefix emptyempty Nastavení PackageVersion přepsání PackageVersionPrefixSetting PackageVersion overwrites PackageVersionPrefix
VersionSuffixVersionSuffix PackageVersionSuffixPackageVersionSuffix emptyempty $ (VersionSuffix) z MSBuild.$(VersionSuffix) from MSBuild. Nastavení PackageVersion přepsání PackageVersionSuffixSetting PackageVersion overwrites PackageVersionSuffix
AutořiAuthors AutořiAuthors Uživatelské jméno aktuálního uživateleUsername of the current user
VlastníciOwners NEUŽÍVÁ SE.N/A Nepřítomno v NuSpecNot present in NuSpec
NázevTitle NázevTitle PackageIdThe PackageId
PopisDescription PopisDescription Popis balíčku"Package Description"
CopyrightCopyright CopyrightCopyright emptyempty
RequireLicenseAcceptanceRequireLicenseAcceptance PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance falsefalse
licenselicense PackageLicenseExpressionPackageLicenseExpression emptyempty Odpovídá <license type="expression">Corresponds to <license type="expression">
licenselicense PackageLicenseFilePackageLicenseFile emptyempty Odpovídá <license type="file">.Corresponds to <license type="file">. Musíte explicitně sbalit soubor s odkazem na licenci.You need to explicitly pack the referenced license file.
LicenseUrlLicenseUrl PackageLicenseUrlPackageLicenseUrl emptyempty PackageLicenseUrl je zastaralá, použijte vlastnost PackageLicenseExpression nebo PackageLicenseFile.PackageLicenseUrl is deprecated, use the PackageLicenseExpression or PackageLicenseFile property
ProjectUrlProjectUrl PackageProjectUrlPackageProjectUrl emptyempty
IkonaIcon PackageIconPackageIcon emptyempty Musíte explicitně sbalit soubor obrázku odkazované ikony.You need to explicitly pack the referenced icon image file.
IconUrlIconUrl PackageIconUrlPackageIconUrl emptyempty Pro dosažení nejlepšího prostředí pro starší verze by měla být kromě PackageIconurčena PackageIconUrl.For the best downlevel experience, PackageIconUrl should be specified in addition to PackageIcon. Už se PackageIconUrl zastaralá.Longer term, PackageIconUrl will be deprecated.
ZnačkyTags PackageTagsPackageTags emptyempty Značky jsou středníky odděleny středníkem.Tags are semi-colon delimited.
ReleaseNotesReleaseNotes PackageReleaseNotesPackageReleaseNotes emptyempty
Úložiště/adresa URLRepository/Url RepositoryUrlRepositoryUrl emptyempty Adresa URL úložiště, která se používá k klonování nebo načtení zdrojového kódu.Repository URL used to clone or retrieve source code. Příklad: https://github.com/NuGet/NuGet.Client.gitExample: https://github.com/NuGet/NuGet.Client.git
Úložiště/typRepository/Type RepositoryTypeRepositoryType emptyempty Typ úložištěRepository type. Příklady: Git, TFS.Examples: git, tfs.
Úložiště/větevRepository/Branch RepositoryBranchRepositoryBranch emptyempty Volitelné informace o větvi úložištěOptional repository branch information. Pro zahrnutí této vlastnosti je nutné zadat také RepositoryUrl .RepositoryUrl must also be specified for this property to be included. Příklad: Master (NuGet 4.7.0 +)Example: master (NuGet 4.7.0+)
Úložiště/potvrzení změnRepository/Commit RepositoryCommitRepositoryCommit emptyempty Volitelné potvrzení změn úložiště nebo sada změn, které označují, na který zdroj byl balíček vytvořen.Optional repository commit or changeset to indicate which source the package was built against. Pro zahrnutí této vlastnosti je nutné zadat také RepositoryUrl .RepositoryUrl must also be specified for this property to be included. Příklad: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0 +)Example: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+)
PackageTypePackageType <PackageType>DotNetCliTool, 1.0.0.0;Dependency, 2.0.0.0</PackageType>
PřehledSummary Není podporovánoNot supported

cílové vstupy balenípack target inputs

  • Ispackable nastavenouIsPackable
  • SuppressDependenciesWhenPackingSuppressDependenciesWhenPacking
  • PackageVersionPackageVersion
  • PackageIdPackageId
  • AutořiAuthors
  • PopisDescription
  • CopyrightCopyright
  • PackageRequireLicenseAcceptancePackageRequireLicenseAcceptance
  • DevelopmentDependencyDevelopmentDependency
  • PackageLicenseExpressionPackageLicenseExpression
  • PackageLicenseFilePackageLicenseFile
  • PackageLicenseUrlPackageLicenseUrl
  • PackageProjectUrlPackageProjectUrl
  • PackageIconUrlPackageIconUrl
  • PackageReleaseNotesPackageReleaseNotes
  • PackageTagsPackageTags
  • PackageOutputPathPackageOutputPath
  • IncludeSymbolsIncludeSymbols
  • IncludeSourceIncludeSource
  • PackageTypesPackageTypes
  • NástrojIsTool
  • RepositoryUrlRepositoryUrl
  • RepositoryTypeRepositoryType
  • RepositoryBranchRepositoryBranch
  • RepositoryCommitRepositoryCommit
  • NoPackageAnalysisNoPackageAnalysis
  • MinClientVersionMinClientVersion
  • IncludeBuildOutputIncludeBuildOutput
  • IncludeContentInPackIncludeContentInPack
  • BuildOutputTargetFolderBuildOutputTargetFolder
  • ContentTargetFoldersContentTargetFolders
  • NuspecFileNuspecFile
  • NuspecBasePathNuspecBasePath
  • NuspecPropertiesNuspecProperties

scénáře sady Packpack scenarios

Potlačit závislostiSuppress dependencies

Chcete-li potlačit závislosti balíčků z generovaného balíčku NuGet, nastavte SuppressDependenciesWhenPacking na true, které umožní přeskočí všechny závislosti ze generovaného souboru nupkg.To suppress package dependencies from generated NuGet package, set SuppressDependenciesWhenPacking to true which will allow skipping all the dependencies from generated nupkg file.

PackageIconUrlPackageIconUrl

místo nové vlastnosti PackageIcon PackageIconUrl bude zastaralá.PackageIconUrl will be deprecated in favor of the new PackageIcon property.

Počínaje verzí NuGet 5,3 & Visual Studio 2019 verze 16,3, pack vyvolá upozornění NU5048 , pokud metadata balíčku určují jenom PackageIconUrl.Starting with NuGet 5.3 & Visual Studio 2019 version 16.3, pack will raise NU5048 warning if the package metadata only specifies PackageIconUrl.

PackageIconPackageIcon

Tip

Pro zajištění zpětné kompatibility se klienty a zdroji, které ještě nepodporují PackageIcon, byste měli zadat jak PackageIcon, tak PackageIconUrl.You should specify both PackageIcon and PackageIconUrl to maintain backward compatibility with clients and sources that do not yet support PackageIcon. Visual Studio bude podporovat PackageIcon pro balíčky ze zdroje založeného na složce v budoucí verzi.Visual Studio will support PackageIcon for packages coming from a folder-based source in a future release.

Balení souboru obrázku ikonyPacking an icon image file

Při balení souboru obrázku ikony je nutné použít vlastnost PackageIcon a zadat cestu k balíčku relativní ke kořenu balíčku.When packing an icon image file, you need to use PackageIcon property to specify the package path, relative to the root of the package. Kromě toho je nutné zajistit, aby byl soubor zahrnut do balíčku.In addition, you need to make sure that the file is included in the package. Velikost souboru obrázku je omezená na 1 MB.Image file size is limited to 1 MB. Podporované formáty souborů zahrnují JPEG a PNG.Supported file formats include JPEG and PNG. Doporučujeme, abyste 64 × 64 rozlišení obrazu.We recommend an image resolution of 64x64.

Příklad:For example:

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

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

Ukázka ikony balíčkuPackage Icon sample.

Pro ekvivalent nuspec se podívejte na nuspec reference pro Icon.For the nuspec equivalent, take a look at nuspec reference for icon.

Výstupní sestaveníOutput assemblies

nuget pack zkopíruje výstupní soubory s rozšířeními .exe, .dll, .xml, .winmd, .jsona .pri.nuget pack copies output files with extensions .exe, .dll, .xml, .winmd, .json, and .pri. Výstupní soubory, které jsou zkopírovány, závisí na tom, co nástroj MSBuild poskytuje z cíle BuiltOutputProjectGroup.The output files that are copied depend on what MSBuild provides from the BuiltOutputProjectGroup target.

Existují dvě vlastnosti nástroje MSBuild, které lze použít v souboru projektu nebo na příkazovém řádku pro řízení, kde výstupní sestavení jdou:There are two MSBuild properties that you can use in your project file or command line to control where output assemblies go:

  • IncludeBuildOutput: logická hodnota, která určuje, zda mají být do balíčku zahrnuty výstupní sestavení sestavení.IncludeBuildOutput: A boolean that determines whether the build output assemblies should be included in the package.
  • BuildOutputTargetFolder: Určuje složku, do které se mají umístit výstupní sestavení.BuildOutputTargetFolder: Specifies the folder in which the output assemblies should be placed. Výstupní sestavení (a další výstupní soubory) se zkopírují do příslušných složek rozhraní.The output assemblies (and other output files) are copied into their respective framework folders.

Odkazy na balíčkyPackage references

Viz odkazy na balíčky v souborech projektu.See Package References in Project Files.

Odkazy na projekt a projektProject to project references

Odkazy na projekt na projekt jsou ve výchozím nastavení považovány za odkazy na balíčky NuGet, například:Project to project references are considered by default as nuget package references, for example:

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

Do odkazu na projekt můžete také přidat následující metadata:You can also add the following metadata to your project reference:

<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>

Zahrnutí obsahu do balíčkuIncluding content in a package

Chcete-li zahrnout obsah, přidejte do existující položky <Content> další metadata.To include content, add extra metadata to the existing <Content> item. Ve výchozím nastavení jsou všechny položky typu "obsah" zahrnuty do balíčku, Pokud nepřepíšete záznamy podobné následujícímu:By default everything of type "Content" gets included in the package unless you override with entries like the following:

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

Ve výchozím nastavení se vše přidá do kořenu content a contentFiles\any\<target_framework> složky v rámci balíčku a zachová relativní strukturu složek, pokud nezadáte cestu k balíčku:By default, everything gets added to the root of the content and contentFiles\any\<target_framework> folder within a package and preserves the relative folder structure, unless you specify a package path:

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

Chcete-li zkopírovat veškerý obsah pouze do konkrétní kořenové složky (místo content a contentFiles obojí), můžete použít vlastnost MSBuild ContentTargetFolders, která má výchozí hodnotu "Content; contentFiles", ale lze ji nastavit na jiné názvy složek.If you want to copy all your content to only a specific root folder(s) (instead of content and contentFiles both), you can use the MSBuild property ContentTargetFolders, which defaults to "content;contentFiles" but can be set to any other folder names. Všimněte si, že pouze zadání "contentFiles" v ContentTargetFolders vloží soubory do contentFiles\any\<target_framework> nebo contentFiles\<language>\<target_framework> na základě buildAction.Note that just specifying "contentFiles" in ContentTargetFolders puts files under contentFiles\any\<target_framework> or contentFiles\<language>\<target_framework> based on buildAction.

PackagePath může být sada cílových cest oddělená středníky.PackagePath can be a semicolon-delimited set of target paths. Zadáním prázdné cesty k balíčku by se soubor přidal do kořenového adresáře balíčku.Specifying an empty package path would add the file to the root of the package. Například následující příkaz přidá libuv.txt do content\myfiles, content\samplesa kořenového adresáře balíčku:For example, the following adds libuv.txt to content\myfiles, content\samples, and the package root:

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

K dispozici je také vlastnost MSBuild $(IncludeContentInPack), která má výchozí hodnotu true.There is also an MSBuild property $(IncludeContentInPack), which defaults to true. Pokud je toto nastavení nastaveno na false na jakémkoli projektu, pak obsah z tohoto projektu není součástí balíčku NuGet.If this is set to false on any project, then the content from that project are not included in the nuget package.

Další metadata specifická pro sadu, která můžete nastavit na některou z výše uvedených položek, zahrnují <PackageCopyToOutput> a <PackageFlatten>, které nastaví CopyToOutput a Flatten hodnoty na contentFiles položce ve výstupním nuspec.Other pack specific metadata that you can set on any of the above items includes <PackageCopyToOutput> and <PackageFlatten> which sets CopyToOutput and Flatten values on the contentFiles entry in the output nuspec.

Poznámka

Kromě položek obsahu lze metadata <Pack> a <PackagePath> také nastavit na soubory s akcí sestavení kompilovat, EmbeddedResource, ApplicationDefinition, Page, Resource, třídy SplashScreen, vazbě designdata, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource nebo None.Apart from Content items, the <Pack> and <PackagePath> metadata can also be set on files with a build action of Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource or None.

Pokud má balíček při použití vzorů expanze názvů připojit název souboru k cestě k balíčku, musí cesta k balíčku končit znakem oddělovače složky. v opačném případě se cesta k balíčku považuje za úplnou cestu včetně názvu souboru.For pack to append the filename to your package path when using globbing patterns, your package path must end with the folder separator character, otherwise the package path is treated as the full path including the file name.

IncludeSymbolsIncludeSymbols

Při použití MSBuild -t:pack -p:IncludeSymbols=truese odpovídající soubory .pdb zkopírují spolu s jinými výstupními soubory (.dll, .exe, .winmd, .xml, .json, .pri).When using MSBuild -t:pack -p:IncludeSymbols=true, the corresponding .pdb files are copied along with other output files (.dll, .exe, .winmd, .xml, .json, .pri). Všimněte si, že nastavení IncludeSymbols=true vytvoří regulární balíček a balíček symbolů.Note that setting IncludeSymbols=true creates a regular package and a symbols package.

IncludeSourceIncludeSource

To je stejné jako u IncludeSymbolss tím rozdílem, že kopíruje zdrojové soubory společně s .pdb soubory.This is the same as IncludeSymbols, except that it copies source files along with .pdb files as well. Všechny soubory typu Compile se zkopírují do src\<ProjectName>\ zachovávání struktury složek relativní cesty ve výsledném balíčku.All files of type Compile are copied over to src\<ProjectName>\ preserving the relative path folder structure in the resulting package. Totéž se taky stane u zdrojových souborů ProjectReference, které mají TreatAsPackageReference nastavené na false.The same also happens for source files of any ProjectReference which has TreatAsPackageReference set to false.

Pokud je soubor typu kompilovat mimo složku projektu, pak je pouze přidán do src\<ProjectName>\.If a file of type Compile, is outside the project folder, then it's just added to src\<ProjectName>\.

Balení licenčního výrazu nebo licenčního souboruPacking a license expression or a license file

Při použití licenčního výrazu by se měla použít vlastnost PackageLicenseExpression.When using a license expression, the PackageLicenseExpression property should be used. Ukázka licenčního výrazu.License expression sample.

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

Přečtěte si další informace o výrazech licencí a licencích, které jsou přijaty nástrojem NuGet.org.Learn more about license expressions and licenses that are accepted by NuGet.org.

Při balení licenčního souboru musíte použít vlastnost PackageLicenseFile a zadat cestu k balíčku relativní ke kořenu balíčku.When packing a license file, you need to use PackageLicenseFile property to specify the package path, relative to the root of the package. Kromě toho je nutné zajistit, aby byl soubor zahrnut do balíčku.In addition, you need to make sure that the file is included in the package. Příklad:For example:

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

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

Ukázka licenčního souboru.License file sample.

NástrojIsTool

Při použití MSBuild -t:pack -p:IsTool=truese všechny výstupní soubory, jak je uvedeno ve scénáři výstupních sestavení , zkopírují do složky tools namísto složky lib.When using MSBuild -t:pack -p:IsTool=true, all output files, as specified in the Output Assemblies scenario, are copied to the tools folder instead of the lib folder. Všimněte si, že se liší od DotNetCliTool, která je určena nastavením PackageType v souboru .csproj.Note that this is different from a DotNetCliTool which is specified by setting the PackageType in .csproj file.

Balení pomocí. nuspecPacking using a .nuspec

I když se místo toho doporučuje Zahrnout všechny vlastnosti , které jsou obvykle v souboru .nuspec v souboru projektu, můžete zvolit použití .nuspec souboru k balení projektu.Although it is recommended that you include all the properties that are usually in the .nuspec file in the project file instead, you can choose to use a .nuspec file to pack your project. Pro projekt bez sady SDK, který používá PackageReference, je nutné importovat NuGet.Build.Tasks.Pack.targets, aby bylo možné spustit úlohu balíčku.For a non-SDK-style project that uses PackageReference, you must import NuGet.Build.Tasks.Pack.targets so that the pack task can be executed. Před zabalením souboru nuspec je ještě nutné projekt obnovit.You still need to restore the project before you can pack a nuspec file. (Projekt ve stylu sady SDK obsahuje cíle balíčku ve výchozím nastavení.)(An SDK-style project includes the pack targets by default.)

Cílová architektura souboru projektu je nerelevantní a při balení nuspec se nepoužívá.The target framework of the project file is irrelevant and not used when packing a nuspec. Následující tři vlastnosti MSBuild jsou relevantní pro balení pomocí .nuspec:The following three MSBuild properties are relevant to packing using a .nuspec:

  1. NuspecFile: relativní nebo absolutní cesta k souboru .nuspec, který se používá pro balení.NuspecFile: relative or absolute path to the .nuspec file being used for packing.
  2. NuspecProperties: středníkem oddělený seznam dvojic klíč = hodnota.NuspecProperties: a semicolon-separated list of key=value pairs. Kvůli způsobu, jakým funguje analýza příkazového řádku nástroje MSBuild, je nutné zadat více vlastností následujícím způsobem: -p:NuspecProperties=\"key1=value1;key2=value2\".Due to the way MSBuild command-line parsing works, multiple properties must be specified as follows: -p:NuspecProperties=\"key1=value1;key2=value2\".
  3. NuspecBasePath: základní cesta k souboru .nuspec.NuspecBasePath: Base path for the .nuspec file.

Při použití dotnet.exe k balení projektu použijte příkaz podobný následujícímu:If using dotnet.exe to pack your project, use a command like the following:

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

Při použití nástroje MSBuild k sbalení projektu použijte příkaz podobný následujícímu:If using MSBuild to pack your project, use a command like the following:

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

Všimněte si, že balení nuspec pomocí příkazu dotnet. exe nebo MSBuild také vede k sestavení projektu ve výchozím nastavení.Please note that packing a nuspec using dotnet.exe or msbuild also leads to building the project by default. K tomu je možné se vyhnout předáním vlastnosti --no-build příkazu dotnet. exe, který je ekvivalentem nastavení <NoBuild>true</NoBuild> v souboru projektu společně s nastavením <IncludeBuildOutput>false</IncludeBuildOutput> v souboru projektu.This can be avoided by passing --no-build property to dotnet.exe, which is the equivalent of setting <NoBuild>true</NoBuild> in your project file, along with setting <IncludeBuildOutput>false</IncludeBuildOutput> in the project file.

Příkladem souboru . csproj pro zabalení souboru nuspec je:An example of a .csproj file to pack a nuspec file 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>

Rozšířené body rozšíření pro vytvoření přizpůsobeného balíčkuAdvanced extension points to create customized package

pack cíl poskytuje dva Rozšiřovací body, které jsou spuštěny v sestavení specifickém pro vnitřní, cílové rozhraní.The pack target provides two extension points that run in the inner, target framework specific build. Rozšiřující body podporují obsah a sestavení konkrétního cílového rozhraní do balíčku:The extension points support including target framework specific content and assemblies into a package:

  • TargetsForTfmSpecificBuildOutput cíl: používá se pro soubory uvnitř lib složky nebo složky zadané pomocí BuildOutputTargetFolder.TargetsForTfmSpecificBuildOutput target: Use for files inside the lib folder or a folder specified using BuildOutputTargetFolder.
  • TargetsForTfmSpecificContentInPackage cíl: použít pro soubory mimo BuildOutputTargetFolder.TargetsForTfmSpecificContentInPackage target: Use for files outside the BuildOutputTargetFolder.

TargetsForTfmSpecificBuildOutputTargetsForTfmSpecificBuildOutput

Napište vlastní cíl a zadejte ho jako hodnotu vlastnosti $(TargetsForTfmSpecificBuildOutput).Write a custom target and specify it as the value of the $(TargetsForTfmSpecificBuildOutput) property. Pro všechny soubory, které potřebují přejít do BuildOutputTargetFolder (lib ve výchozím nastavení), by měl cíl tyto soubory zapsat do skupiny položek BuildOutputInPackage a nastavit následující dvě hodnoty metadat:For any files that need to go into the BuildOutputTargetFolder (lib by default), the target should write those files into the ItemGroup BuildOutputInPackage and set the following two metadata values:

  • FinalOutputPath: absolutní cesta k souboru; Pokud není zadaný, použije se identita k vyhodnocení zdrojové cesty.FinalOutputPath: The absolute path of the file; if not provided, the Identity is used to evaluate source path.
  • TargetPath: (volitelné) nastavte, když soubor potřebuje přejít do podsložky v rámci lib\<TargetFramework>, jako jsou satelitní sestavení, která se nacházejí v odpovídajících složkách kultury.TargetPath: (Optional) Set when the file needs to go into a subfolder within lib\<TargetFramework> , like satellite assemblies that go under their respective culture folders. Výchozí hodnota je název souboru.Defaults to the name of the file.

Příklad:Example:

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

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

TargetsForTfmSpecificContentInPackageTargetsForTfmSpecificContentInPackage

Napište vlastní cíl a zadejte ho jako hodnotu vlastnosti $(TargetsForTfmSpecificContentInPackage).Write a custom target and specify it as the value of the $(TargetsForTfmSpecificContentInPackage) property. U všech souborů, které se mají zahrnout do balíčku, by měl cíl tyto soubory zapsat do skupiny položek TfmSpecificPackageFile a nastavit následující volitelná metadata:For any files to include in the package, the target should write those files into the ItemGroup TfmSpecificPackageFile and set the following optional metadata:

  • PackagePath: cesta, kde by měl být v balíčku výstup souboru.PackagePath: Path where the file should be output in the package. Při přidání více než jednoho souboru do stejné cesty k balíčku vyvolá NuGet vystavení upozornění.NuGet issues a warning if more than one file is added to the same package path.
  • BuildAction: akce sestavení, která se má přiřadit k souboru, se vyžaduje jenom v případě, že je cesta k balíčku ve složce contentFiles.BuildAction: The build action to assign to the file, required only if the package path is in the contentFiles folder. Výchozí hodnota je None.Defaults to "None".

Příklad:An example:

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

cíl obnovenírestore target

MSBuild -t:restore (které nuget restore a dotnet restore použít s projekty .NET Core), obnoví balíčky, na které se odkazuje v souboru projektu, takto:MSBuild -t:restore (which nuget restore and dotnet restore use with .NET Core projects), restores packages referenced in the project file as follows:

  1. Číst všechny odkazy z projektu na projektRead all project to project references
  2. Přečtěte si vlastnosti projektu a najděte mezilehlé složky a cílová rozhraní.Read the project properties to find the intermediate folder and target frameworks
  3. Předání dat nástroje MSBuild do NuGet. Build. Tasks. dllPass MSBuild data to NuGet.Build.Tasks.dll
  4. Spustit obnoveníRun restore
  5. Stáhnout balíčkyDownload packages
  6. Zápis souboru prostředků, cílů a vlastností propsWrite assets file, targets, and props

restore cíl funguje pouze pro projekty, které používají formát PackageReference.The restore target works only for projects using the PackageReference format. Pro projekty , které používají formát packages.config, nefunguje. místo toho použijte obnovení NuGet .It does not work for projects using the packages.config format; use nuget restore instead.

Obnovit vlastnostiRestore properties

Další nastavení obnovení může pocházet z vlastností MSBuild v souboru projektu.Additional restore settings may come from MSBuild properties in the project file. Hodnoty lze také nastavit z příkazového řádku pomocí přepínače -p: (viz příklady níže).Values can also be set from the command line using the -p: switch (see Examples below).

VlastnostProperty PopisDescription
RestoreSourcesRestoreSources Seznam zdrojů balíčků oddělených středníkem.Semicolon-delimited list of package sources.
RestorePackagesPathRestorePackagesPath Cesta ke složce uživatelských balíčkůUser packages folder path.
RestoreDisableParallelRestoreDisableParallel Omezit stahování na jednu po druhé.Limit downloads to one at a time.
RestoreConfigFileRestoreConfigFile Cesta k souboru Nuget.Config, který se má použítPath to a Nuget.Config file to apply.
RestoreNoCacheRestoreNoCache Je-li nastavena hodnota true, nepoužívejte balíčky uložené v mezipaměti.If true, avoids using cached packages. Viz Správa globálních balíčků a složek mezipaměti.See Managing the global packages and cache folders.
RestoreIgnoreFailedSourcesRestoreIgnoreFailedSources Pokud má hodnotu true, ignoruje neúspěšné nebo chybějící zdroje balíčků.If true, ignores failing or missing package sources.
RestoreFallbackFoldersRestoreFallbackFolders Záložní složky používané ve stejném způsobu, jakým se používá složka uživatelských balíčků.Fallback folders, used in the same way the user packages folder is used.
RestoreAdditionalProjectSourcesRestoreAdditionalProjectSources Další zdroje, které se mají použít při obnovení.Additional sources to use during restore.
RestoreAdditionalProjectFallbackFoldersRestoreAdditionalProjectFallbackFolders Další záložní složky, které se mají použít při obnoveníAdditional fallback folders to use during restore.
RestoreAdditionalProjectFallbackFoldersExcludesRestoreAdditionalProjectFallbackFoldersExcludes Vyloučí záložní složky zadané v RestoreAdditionalProjectFallbackFoldersExcludes fallback folders specified in RestoreAdditionalProjectFallbackFolders
RestoreTaskAssemblyFileRestoreTaskAssemblyFile Cesta k NuGet.Build.Tasks.dllPath to NuGet.Build.Tasks.dll.
RestoreGraphProjectInputRestoreGraphProjectInput Středníkem oddělený seznam projektů, které mají být obnoveny, které by měly obsahovat absolutní cesty.Semicolon-delimited list of projects to restore, which should contain absolute paths.
RestoreUseSkipNonexistentTargetsRestoreUseSkipNonexistentTargets Když jsou projekty shromažďovány pomocí nástroje MSBuild, určuje, zda jsou shromažďovány pomocí optimalizace SkipNonexistentTargets.When the projects are collected via MSBuild it determines whether they are collected using the SkipNonexistentTargets optimization. Pokud není nastavená, výchozí hodnota je true.When not set, defaults to true. Příčinou je rychlé chování při selhání, když cíle projektu nelze importovat.The consequence is a fail-fast behavior when a project's targets cannot be imported.
MSBuildProjectExtensionsPathMSBuildProjectExtensionsPath Výstupní složka, výchozí nastavení pro BaseIntermediateOutputPath a složku obj.Output folder, defaulting to BaseIntermediateOutputPath and the obj folder.
RestoreForceRestoreForce V projektech založených na PackageReference vynutí vyřešení všech závislostí i v případě, že bylo poslední obnovení úspěšné.In PackageReference based projects, forces all dependencies to be resolved even if the last restore was successful. Zadání tohoto příznaku se podobá odstranění souboru project.assets.json.Specifying this flag is similar to deleting the project.assets.json file. To neobejde mezipaměť HTTP-cache.This does not bypass the http-cache.
RestorePackagesWithLockFileRestorePackagesWithLockFile Výslovný se na použití souboru zámku.Opts into the usage of a lock file.
RestoreLockedModeRestoreLockedMode Spustit obnovení v uzamčeném režimu.Run restore in locked mode. To znamená, že obnovení nebude přehodnocovat závislosti.This means that restore will not reevaluate the dependencies.
NuGetLockFilePathNuGetLockFilePath Vlastní umístění souboru zámku.A custom location for the lock file. Výchozí umístění je vedle projektu a má název packages.lock.json.The default location is next to the project and is named packages.lock.json.
RestoreForceEvaluateRestoreForceEvaluate Vynutí obnovení pro přepočítání závislostí a aktualizaci souboru zámku bez upozornění.Forces restore to recompute the dependencies and update the lock file without any warning.

PříkladyExamples

Příkazový řádek:Command line:

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

Soubor projektu:Project file:

<PropertyGroup>
    <RestoreIgnoreFailedSource>true</RestoreIgnoreFailedSource>
</PropertyGroup>

Obnovit výstupyRestore outputs

Obnovení vytvoří ve složce Build obj následující soubory:Restore creates the following files in the build obj folder:

SouborFile PopisDescription
project.assets.json Obsahuje graf závislostí všech odkazů na balíčky.Contains the dependency graph of all package references.
{projectName}.projectFileExtension.nuget.g.props Odkazy na MSBuild props obsažená v balíčcíchReferences to MSBuild props contained in packages
{projectName}.projectFileExtension.nuget.g.targets Odkazy na cíle nástroje MSBuild obsažené v balíčcíchReferences to MSBuild targets contained in packages

Obnovení a sestavování pomocí jednoho příkazu MSBuildRestoring and building with one MSBuild command

Vzhledem k tomu, že nástroj NuGet dokáže obnovit balíčky, které vycházejí z cílů a props nástroje MSBuild, jsou vyhodnocení obnovení a sestavení spouštěna s různými globálními vlastnostmi.Due to the fact that NuGet can restore packages that bring down MSBuild targets and props, the restore and build evaluations are run with different global properties. To znamená, že následující nastavení bude mít nepředvídatelné a často nesprávné chování.This means that the following will have an unpredictable and often incorrect behavior.

msbuild -t:restore,build

Místo doporučeného přístupu:Instead the recommended approach is:

msbuild -t:build -restore

Stejná logika platí i pro jiné cíle, podobně jako u build.The same logic applies to other targets similar to build.

PackageTargetFallbackPackageTargetFallback

Element PackageTargetFallback umožňuje zadat sadu kompatibilních cílů, které se mají použít při obnovování balíčků.The PackageTargetFallback element allows you to specify a set of compatible targets to be used when restoring packages. Je navržena tak, aby povolovala balíčkům, které používají dotnet TxM pro práci s kompatibilními balíčky, které nedeklarují dotnet TxM.It's designed to allow packages that use a dotnet TxM to work with compatible packages that don't declare a dotnet TxM. To znamená, že pokud váš projekt používá dotnet TxM, pak všechny balíčky, na kterých závisí, musí mít také hodnotu dotnet TxM, pokud nepřidáte <PackageTargetFallback> do projektu, aby bylo umožněno kompatibilitu platforem, které nejsou dotnet, pomocí dotnet.That is, if your project uses the dotnet TxM, then all the packages it depends on must also have a dotnet TxM, unless you add the <PackageTargetFallback> to your project in order to allow non-dotnet platforms to be compatible with dotnet.

Například pokud projekt používá netstandard1.6 TxM a závislý balíček obsahuje pouze lib/net45/a.dll a lib/portable-net45+win81/a.dll, projekt se nepodaří sestavit.For example, if the project is using the netstandard1.6 TxM, and a dependent package contains only lib/net45/a.dll and lib/portable-net45+win81/a.dll, then the project will fail to build. Pokud je to, co chcete uvést, je druhá knihovna DLL, pak můžete přidat PackageTargetFallback následujícím způsobem, aby se říká, že je knihovna DLL portable-net45+win81 kompatibilní:If what you want to bring in is the latter DLL, then you can add a PackageTargetFallback as follows to say that the portable-net45+win81 DLL is compatible:

<PackageTargetFallback Condition="'$(TargetFramework)'=='netstandard1.6'">
    portable-net45+win81
</PackageTargetFallback>

Chcete-li deklarovat zálohu pro všechny cíle v projektu, ponechte atribut Condition.To declare a fallback for all targets in your project, leave off the Condition attribute. Existující PackageTargetFallback můžete také roztáhnout tak, že zahrnete $(PackageTargetFallback), jak je znázorněno zde:You can also extend any existing PackageTargetFallback by including $(PackageTargetFallback) as shown here:

<PackageTargetFallback>
    $(PackageTargetFallback);portable-net45+win81
</PackageTargetFallback >

Nahrazení jedné knihovny z grafu obnoveníReplacing one library from a restore graph

Pokud obnovení předává nesprávné sestavení, je možné vyřadit výchozí volbu balíčků a nahradit ji vlastní volbou.If a restore is bringing the wrong assembly, it's possible to exclude that packages default choice, and replace it with your own choice. Nejprve s PackageReferencenejvyšší úrovně vylučte všechny prostředky:First with a top level PackageReference, exclude all assets:

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

Dále přidejte vlastní odkaz na příslušnou místní kopii knihovny DLL:Next, add your own reference to the appropriate local copy of the DLL:

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