NuGet pack and restore as MSBuild targets
NuGet 4.0+
Ve formátu NuGet PackageReference může verze 4.0+ ukládat všechna metadata manifestu přímo do souboru projektu místo použití samostatného .nuspec
souboru.
S MSBuild 15,1+ NuGet je také prvotřídní MSBuild občan s pack
cíli a restore
cíli, jak je popsáno níže. Tyto cíle umožňují pracovat stejně NuGet jako s jakýmkoli jiným MSBuild úkolem nebo cílem. Pokyny k NuGet vytvoření balíčku pomocí MSBuildnaleznete v tématu Vytvoření NuGet balíčku pomocí MSBuild. (Pro NuGet 3.x a starší, místo toho použijete příkazy balíčku a obnovení prostřednictvím rozhraní příkazového NuGet řádku.)
Pořadí sestavení cílů
Vzhledem k tomu pack
, že jsou restore
MSBuild cíle, můžete k nim přistupovat a vylepšit tak pracovní postup. Řekněme například, že chcete balíček po zabalení zkopírovat do sdílené síťové složky. Můžete to udělat tak, že do souboru projektu přidáte následující:
<Target Name="CopyPackage" AfterTargets="Pack">
<Copy
SourceFiles="$(OutputPath)..\$(PackageId).$(PackageVersion).nupkg"
DestinationFolder="\\myshare\packageshare\"
/>
</Target>
Podobně můžete napsat MSBuild úkol, napsat vlastní cíl a využívat NuGet vlastnosti v MSBuild úkolu.
Poznámka:
$(OutputPath)
je relativní a očekává, že příkaz spouštíte z kořenového adresáře projektu.
cíl balíčku
Pro projekty .NET, které používají PackageReference
formát, pomocí nakreslí msbuild -t:pack
vstupy ze souboru projektu, které se použijí při vytváření NuGet balíčku.
Následující tabulka popisuje MSBuild vlastnosti, které lze přidat do souboru projektu v rámci prvního <PropertyGroup>
uzlu. Tyto úpravy můžete snadno provést v sadě Visual Studio 2017 a novějších kliknutím pravým tlačítkem myši na projekt a výběrem možnosti Upravit {project_name} v místní nabídce. Pro usnadnění je tabulka uspořádaná podle ekvivalentní vlastnosti v .nuspec
souboru.
Poznámka:
Owners
a Summary
vlastnosti z .nuspec
nejsou podporovány s MSBuild.
Atribut nebonuspec hodnota | MSBuild Vlastnost | Výchozí | Notes |
---|---|---|---|
Id |
PackageId |
$(AssemblyName) |
$(AssemblyName) od MSBuild |
Version |
PackageVersion |
Verze | To je kompatibilní semver, například 1.0.0 , 1.0.0-beta nebo 1.0.0-beta-00345 . Výchozí hodnota je Version , pokud není nastavená. |
VersionPrefix |
VersionPrefix |
empty | Nastavení PackageVersion přepsání VersionPrefix |
VersionSuffix |
VersionSuffix |
empty | Nastavení PackageVersion přepsání VersionSuffix |
Authors |
Authors |
Uživatelské jméno aktuálního uživatele | Seznam autorů balíčků oddělený středníkem, který odpovídá názvům profilů v nuget.org. Ty se zobrazují v NuGet galerii v nuget.org a používají se k křížovému odkazu balíčků stejnými autory. |
Owners |
– | Není přítomno v nuspec | |
Title |
Title |
$(PackageId) |
Popisný název balíčku, který se obvykle používá v uživatelském rozhraní, se zobrazuje jako nugetv .org a Správce balíčků v sadě Visual Studio. |
Description |
Description |
"Popis balíčku" | Dlouhý popis sestavení. Pokud PackageDescription není zadána, tato vlastnost se také používá jako popis balíčku. |
Copyright |
Copyright |
empty | Podrobnosti o autorských právech pro balíček. |
RequireLicenseAcceptance |
PackageRequireLicenseAcceptance |
false |
Logická hodnota, která určuje, zda klient musí před instalací balíčku vyzvat příjemce k přijetí licence balíčku. |
license |
PackageLicenseExpression |
empty | <license type="expression"> Odpovídá . Viz Balení licenčního výrazu nebo licenčního souboru. |
license |
PackageLicenseFile |
empty | Cesta k souboru licence v balíčku, pokud používáte vlastní licenci nebo licenci, která nemá přiřazený identifikátor SPDX. Musíte explicitně zabalit odkazovaný licenční soubor. <license type="file"> Odpovídá . Viz Balení licenčního výrazu nebo licenčního souboru. |
LicenseUrl |
PackageLicenseUrl |
empty | PackageLicenseUrl je zastaralý. Použijte PackageLicenseExpression nebo PackageLicenseFile místo toho. |
ProjectUrl |
PackageProjectUrl |
empty | |
Icon |
PackageIcon |
empty | Cesta k obrázku v balíčku, která se má použít jako ikona balíčku. Musíte explicitně zabalit odkazovaný soubor obrázku ikony. Další informace naleznete v tématu Balení souboru obrázku ikony a icon metadata. |
IconUrl |
PackageIconUrl |
empty | PackageIconUrl je zastaralá ve prospěch PackageIcon . Pro nejlepší nižší úroveň prostředí byste však měli kromě PackageIconUrl PackageIcon . |
Readme |
PackageReadmeFile |
empty | Musíte explicitně zabalit odkazovaný soubor readme. |
Tags |
PackageTags |
empty | Seznam značek oddělených středníkem, který označuje balíček. |
ReleaseNotes |
PackageReleaseNotes |
empty | Poznámky k verzi balíčku |
Repository/Url |
RepositoryUrl |
empty | Adresa URL úložiště používaná ke klonování nebo načítání zdrojového kódu. Příklad: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
Repository/Type |
RepositoryType |
empty | Typ úložiště. Příklady: git (výchozí), tfs . |
Repository/Branch |
RepositoryBranch |
empty | Volitelné informace o větvi úložiště RepositoryUrl musí být také zadána pro tuto vlastnost, která má být zahrnuta. Příklad: master (NuGet 4.7.0+). |
Repository/Commit |
RepositoryCommit |
empty | Volitelné potvrzení úložiště nebo sada změn označující, pro který zdroj byl balíček sestaven. RepositoryUrl musí být také zadána pro tuto vlastnost, která má být zahrnuta. Příklad: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
PackageType |
<PackageType>CustomType1, 1.0.0.0;CustomType2</PackageType> |
Označuje zamýšlené použití balíčku. Typy balíčků používají stejný formát jako ID balíčků a jsou oddělené .; Typy balíčků můžou být verzí pomocí připojení , a Version řetězce. Viz Nastavení NuGet typu balíčku (NuGet 3.5.0+). |
|
Summary |
Nepodporováno |
cílové vstupy balíčku
Vlastnost | Popis |
---|---|
IsPackable |
Logická hodnota, která určuje, zda lze projekt zabalit. Výchozí hodnota je true . |
SuppressDependenciesWhenPacking |
Nastavte na true potlačení závislostí balíčku z vygenerovaného NuGet balíčku. |
PackageVersion |
Určuje verzi, kterou bude mít výsledný balíček. Přijímá všechny formy NuGet řetězce verze. Výchozí hodnota je hodnota $(Version) vlastnosti Version v projektu. |
PackageId |
Určuje název výsledného balíčku. Pokud není zadáno, použije operace pack jako AssemblyName název balíčku výchozí název nebo název adresáře. |
PackageDescription |
Dlouhý popis balíčku pro zobrazení uživatelského rozhraní. |
Authors |
Seznam autorů balíčků oddělený středníkem, který odpovídá názvům profilů v nuget.org. Ty se zobrazují v NuGet galerii v nuget.org a používají se k křížovému odkazu balíčků stejnými autory. |
Description |
Dlouhý popis sestavení. Pokud PackageDescription není zadána, tato vlastnost se také používá jako popis balíčku. |
Copyright |
Podrobnosti o autorských právech pro balíček. |
PackageRequireLicenseAcceptance |
Logická hodnota, která určuje, zda klient musí před instalací balíčku vyzvat příjemce k přijetí licence balíčku. Výchozí hodnota je false . |
DevelopmentDependency |
Logická hodnota, která určuje, jestli je balíček označen jako závislost určená jen pro vývoj, což brání zahrnutí balíčku jako závislosti v jiných balíčcích. U PackageReference (NuGet 4.8+) tento příznak také znamená, že prostředky kompilace jsou vyloučené z kompilace. Další informace naleznete v tématu DevelopmentDependency support for PackageReference. |
PackageLicenseExpression |
Identifikátor licence SPDX nebo výraz, Apache-2.0 například . Další informace naleznete v tématu Balení výrazu licence nebo souboru licence. |
PackageLicenseFile |
Cesta k souboru licence v balíčku, pokud používáte vlastní licenci nebo licenci, která nemá přiřazený identifikátor SPDX. |
PackageLicenseUrl |
PackageLicenseUrl je zastaralý. Použijte PackageLicenseExpression nebo PackageLicenseFile místo toho. |
PackageProjectUrl |
|
PackageIcon |
Určuje cestu ikony balíčku vzhledem ke kořenovému adresáři balíčku. Další informace naleznete v tématu Balení souboru obrázku ikony. |
PackageReleaseNotes |
Poznámky k verzi balíčku |
PackageReadmeFile |
Readme pro balíček. |
PackageTags |
Seznam značek oddělených středníkem, který označuje balíček. |
PackageOutputPath |
Určuje výstupní cestu, ve které se zabalený balíček zahodí. Výchozí hodnota je $(OutputPath) . |
IncludeSymbols |
Tato logická hodnota označuje, jestli má balíček při zabalení projektu vytvořit další balíček symbolů. Formát balíčku symbolů je řízen SymbolPackageFormat vlastností. Další informace naleznete v tématu IncludeSymbols. |
IncludeSource |
Tato logická hodnota označuje, jestli má proces balíčku vytvořit zdrojový balíček. Zdrojový balíček obsahuje zdrojový kód knihovny i soubory PDB. Zdrojové soubory se umístí do src/ProjectName adresáře do výsledného souboru balíčku. Další informace naleznete v tématu IncludeSource. |
PackageType |
|
IsTool |
Určuje, jestli se všechny výstupní soubory zkopírují do složky nástrojů místo do složky lib . Další informace naleznete v tématu IsTool. |
RepositoryUrl |
Adresa URL úložiště používaná ke klonování nebo načítání zdrojového kódu. Příklad: https://github.com/NuGethttps://github.com/NuGet/NuGet.Client.git. |
RepositoryType |
Typ úložiště. Příklady: git (výchozí), tfs . |
RepositoryBranch |
Volitelné informace o větvi úložiště RepositoryUrl musí být také zadána pro tuto vlastnost, která má být zahrnuta. Příklad: master (NuGet 4.7.0+). |
RepositoryCommit |
Volitelné potvrzení úložiště nebo sada změn označující, pro který zdroj byl balíček sestaven. RepositoryUrl musí být také zadána pro tuto vlastnost, která má být zahrnuta. Příklad: 0e4d1b598f350b3dc675018d539114d1328189ef (NuGet 4.7.0+). |
SymbolPackageFormat |
Určuje formát balíčku symbolů. Pokud "symbols.nupkg", vytvoří se starší balíček symbolů s příponou .symbols.nupkg obsahující soubory PDB, knihovny DLL a další výstupní soubory. Pokud "snupkg", vytvoří se balíček symbolů snupkg obsahující přenosné soubory PDB. Výchozí hodnota je symbols.nupkg. |
NoPackageAnalysis |
Určuje, že pack se po sestavení balíčku nespustí analýza balíčku. |
MinClientVersion |
Určuje minimální verzi NuGet klienta, která může nainstalovat tento balíček vynucený .exe nugeta Správce balíčků sady Visual Studio. |
IncludeBuildOutput |
Tato logická hodnota určuje, zda mají být výstupní sestavení sestavení zabalena do souboru .nupkg , nebo ne. |
IncludeContentInPack |
Tato logická hodnota určuje, zda jsou všechny položky, které mají typ Content , zahrnuty do výsledného balíčku automaticky. Výchozí hodnota je true . |
BuildOutputTargetFolder |
Určuje složku, kam se mají umístit výstupní sestavení. Výstupní sestavení (a další výstupní soubory) se zkopírují do příslušných složek architektury. Další informace naleznete v tématu Výstupní sestavení. |
ContentTargetFolders |
Určuje výchozí umístění, kam mají všechny soubory obsahu přejít, pokud PackagePath pro ně nejsou zadané. Výchozí hodnota je "content; contentFiles". Další informace naleznete v tématu Zahrnutí obsahu do balíčku. |
NuspecFile |
Relativní nebo absolutní cesta k souboru použitému .nuspec k balení. Pokud je zadáno, používá se výhradně pro balení informací a všechny informace v projektech se nepoužívají. Další informace naleznete v tématu Balení pomocí ..nuspec |
NuspecBasePath |
Základní cesta k .nuspec souboru. Další informace naleznete v tématu Balení pomocí ..nuspec |
NuspecProperties |
Středník oddělený seznam párů klíč=hodnota Další informace naleznete v tématu Balení pomocí ..nuspec |
Scénáře balíčků
Potlačení závislostí
Pokud chcete potlačit závislosti balíčku z vygenerovaného NuGet balíčku, nastavte SuppressDependenciesWhenPacking
na to, aby true
bylo možné přeskočit všechny závislosti ze vygenerovaného souboru nupkg.
PackageIconUrl
PackageIconUrl
je zastaralá ve prospěch nemovitosti PackageIcon
. NuGet Počínaje verzí 5.3 a sadou Visual Studio 2019 verze 16.3 vyvolá upozornění NU5048, pack
pokud metadata balíčku pouze specifikují PackageIconUrl
.
PackageIcon
Tip
Chcete-li zachovat zpětnou kompatibilitu s klienty a zdroji, které ještě nepodporují PackageIcon
, zadejte oba PackageIcon
a PackageIconUrl
. Visual Studio podporuje PackageIcon
balíčky pocházející ze zdroje založeného na složce.
Balení souboru obrázku ikony
Při balení souboru obrázku ikony použijte PackageIcon
vlastnost k určení cesty k souboru ikony vzhledem ke kořenovému adresáři balíčku. Kromě toho se ujistěte, že je soubor součástí balíčku. Velikost souboru obrázku je omezená na 1 MB. Mezi podporované formáty souborů patří JPEG a PNG. Doporučujeme rozlišení obrázku 128x128.
Příklad:
<PropertyGroup>
...
<PackageIcon>icon.png</PackageIcon>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="images\icon.png" Pack="true" PackagePath="\"/>
...
</ItemGroup>
Ukázka ikony balíčku
V případě ekvivalentu nuspec se podívejte na nuspec ikonu odkazu.
PackageReadmeFile
Podporováno ve verzi NuGet 5.10.0 Preview 2.NET / SDK 5.0.300 a vyšší
Při balení souboru readme je nutné použít PackageReadmeFile
vlastnost k určení cesty balíčku vzhledem ke kořenovému adresáři balíčku. Kromě toho je potřeba zajistit, aby byl soubor součástí balíčku. Podporované formáty souborů zahrnují pouze Markdown (.md).
Příklad:
<PropertyGroup>
...
<PackageReadmeFile>readme.md</PackageReadmeFile>
...
</PropertyGroup>
<ItemGroup>
...
<None Include="docs\readme.md" Pack="true" PackagePath="\"/>
...
</ItemGroup>
nuspec Pro ekvivalent se podívejte na nuspec referenční informace o souboru readme.
Výstupní sestavení
nuget pack
zkopíruje výstupní soubory s příponou .exe
, , .dll
.xml
, .winmd
.json
a .pri
. Výstupní soubory, které se zkopírují, závisí na tom, co MSBuild poskytuje cíl BuiltOutputProjectGroup
.
V souboru projektu nebo příkazovém řádku můžete použít dvě MSBuild vlastnosti, které určují, kam výstupní sestavení patří:
IncludeBuildOutput
: Logická hodnota, která určuje, zda mají být výstupní sestavení sestavení zahrnuta do balíčku.BuildOutputTargetFolder
: Určuje složku, do které se mají umístit výstupní sestavení. Výstupní sestavení (a další výstupní soubory) se zkopírují do příslušných složek architektury.
Odkazy na balíčky
Viz odkazy na balíčky v souborech projektu.
Odkazy na projekt do projektu
Odkazy projektu na projekt se ve výchozím nastavení považují za NuGet odkazy na balíčky. Příklad:
<ProjectReference Include="..\UwpLibrary2\UwpLibrary2.csproj"/>
Do odkazu na projekt můžete přidat také následující metadata:
<IncludeAssets>
<ExcludeAssets>
<PrivateAssets>
Zahrnutí obsahu do balíčku
Pokud chcete zahrnout obsah, přidejte k existující <Content>
položce další metadata. Ve výchozím nastavení se veškerý typ "Obsah" zahrne do balíčku, pokud nepřepíšete položky jako následující:
<Content Include="..\win7-x64\libuv.txt">
<Pack>false</Pack>
</Content>
Ve výchozím nastavení se všechno přidá do kořenového content
adresáře 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:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles\</PackagePath>
</Content>
Pokud chcete zkopírovat veškerý obsah pouze do konkrétních kořenových složek (místo content
obojího contentFiles
), můžete použít MSBuild vlastnost ContentTargetFolders
, která ve výchozím nastavení "obsah; contentFiles" ale lze nastavit na jakékoli jiné názvy složek. Všimněte si, že stačí zadat "contentFiles" do ContentTargetFolders
souborů nebo contentFiles\<language>\<target_framework>
contentFiles\any\<target_framework>
na základě nich buildAction
.
PackagePath
může být středník oddělená sadou cílových cest. Zadáním prázdné cesty balíčku by se soubor přidal do kořenového adresáře balíčku. Například následující přidá libuv.txt
do content\myfiles
souboru , content\samples
a kořen balíčku:
<Content Include="..\win7-x64\libuv.txt">
<Pack>true</Pack>
<PackagePath>content\myfiles;content\sample;;</PackagePath>
</Content>
K dispozici je také MSBuild vlastnost $(IncludeContentInPack)
, která ve výchozím nastavení true
. Pokud je tato možnost nastavena na false
libovolný projekt, obsah z tohoto projektu není součástí nuget balíčku.
Další metadata specifická pro balíček, která můžete nastavit pro kteroukoli z výše uvedených položek, a <PackageCopyToOutput>
<PackageFlatten>
které nastaví CopyToOutput
a Flatten
hodnoty contentFiles
položky ve výstupu nuspec.
Poznámka:
Kromě položek <Pack>
obsahu lze také nastavit metadata a <PackagePath>
soubory pomocí akce sestavení Compile, EmbeddedResource, ApplicationDefinition, Page, Resource, SplashScreen, DesignData, DesignData, DesignDataWithDesignTimeCreateableTypes, CodeAnalysisDictionary, AndroidAsset, AndroidResource, BundleResource nebo None.
Aby balíček při použití vzorů globbingu připojil název souboru k cestě balíčku, musí cesta balíčku končit znakem oddělovače složek, jinak se cesta balíčku považuje za úplnou cestu včetně názvu souboru.
IncludeSymbols
Při použití MSBuild -t:pack -p:IncludeSymbols=true
se odpovídající .pdb
soubory zkopírují spolu s dalšími výstupními soubory (.dll
, .exe
, .winmd
, .xml
, , .json
). .pri
Všimněte si, že nastavení IncludeSymbols=true
vytvoří běžný balíček a balíček symbolů.
IncludeSource
To je stejné jako IncludeSymbols
, s tím rozdílem, že kopíruje zdrojové soubory spolu se .pdb
soubory také. Všechny soubory typu Compile
se zkopírují za účelem src\<ProjectName>\
zachování struktury složky relativní cesty ve výsledném balíčku. Totéž platí také pro zdrojové soubory všech ProjectReference
, které jsou nastaveny TreatAsPackageReference
na false
.
Pokud je soubor typu Kompilace, je mimo složku projektu, je právě přidán do src\<ProjectName>\
.
Balení licenčního výrazu nebo licenčního souboru
Při použití licenčního výrazu PackageLicenseExpression
použijte vlastnost. Ukázku najdete v ukázce výrazu licence.
<PropertyGroup>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>
Další informace o licenčních výrazech a licencích, NuGetkteré přijímá .org, najdete v metadatech licencí.
Při balení licenčního souboru použijte PackageLicenseFile
vlastnost k určení cesty k balíčku vzhledem ke kořenovému adresáři balíčku. Kromě toho se ujistěte, že je soubor součástí balíčku. Příklad:
<PropertyGroup>
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="licenses\LICENSE.txt" Pack="true" PackagePath=""/>
</ItemGroup>
Ukázku najdete v ukázce licenčního souboru.
Poznámka:
Pouze jeden z PackageLicenseExpression
, PackageLicenseFile
a PackageLicenseUrl
lze zadat najednou.
Balení souboru bez přípony
V některých scénářích, například při balení licenčního souboru, můžete chtít zahrnout soubor bez přípony. Z historických důvodů NuGet a MSBuild zacházíme s cestami bez rozšíření jako adresářů.
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
<ItemGroup>
<None Include="LICENSE" Pack="true" PackagePath=""/>
</ItemGroup>
IsTool
Při použití MSBuild -t:pack -p:IsTool=true
, všechny výstupní soubory, jak je uvedeno ve scénáři výstupní sestavení , se zkopírují do tools
složky místo lib
složky. Všimněte si, že se liší od toho DotNetCliTool
, který je určen nastavením PackageType
v .csproj
souboru.
Balení pomocí .nuspec
souboru
I když se doporučuje zahrnout všechny vlastnosti , které jsou obvykle v .nuspec
souboru v souboru projektu, můžete se rozhodnout použít .nuspec
soubor k zabalení projektu. Pro projekt, který nepoužívá sadu SDK, který používá PackageReference
, je nutné importovat NuGet.Build.Tasks.Pack.targets
, aby bylo možné spustit úlohu balíčku. Než budete moct zabalit nuspec soubor, musíte projekt obnovit. (Projekt ve stylu sady SDK obsahuje cíle balíčku ve výchozím nastavení.)
Cílová architektura souboru projektu je irelevantní a nepoužívá se při balení nuspec. Následující tři MSBuild vlastnosti jsou relevantní pro balení pomocí .nuspec
:
NuspecFile
: relativní nebo absolutní cesta k souboru používanému.nuspec
k balení.NuspecProperties
: středník oddělený seznam párů klíč=hodnota. Vzhledem ke způsobu, jakým MSBuild funguje analýza příkazového řádku, musí být zadáno více vlastností takto:-p:NuspecProperties="key1=value1;key2=value2"
.NuspecBasePath
: Základní cesta k.nuspec
souboru.
Pokud k zabalení projektu používáte dotnet.exe
příkaz podobný tomuto:
dotnet pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Pokud k zabalení projektu používáte MSBuild příkaz podobný tomuto:
msbuild -t:pack <path to .csproj file> -p:NuspecFile=<path to nuspec file> -p:NuspecProperties=<> -p:NuspecBasePath=<Base path>
Upozorňujeme, že balení nuspec pomocí dotnet.exe nebo msbuild také vede k sestavení projektu ve výchozím nastavení. Můžete se tomu vyhnout předáním --no-build
vlastnosti do dotnet.exe, což je ekvivalent nastavení <NoBuild>true</NoBuild>
v souboru projektu spolu s nastavením <IncludeBuildOutput>false</IncludeBuildOutput>
v souboru projektu.
Příkladem souboru .csproj pro zabalení nuspec souboru je:
<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>
Pokročilé body rozšíření pro vytvoření přizpůsobeného balíčku
Cíl pack
poskytuje dva body rozšíření, které běží ve vnitřním sestavení specifickém pro cílovou architekturu. Body rozšíření podporují, včetně obsahu a sestavení specifického pro cílovou architekturu do balíčku:
TargetsForTfmSpecificBuildOutput
target: Slouží pro soubory uvnitřlib
složky nebo složky zadané pomocíBuildOutputTargetFolder
.TargetsForTfmSpecificContentInPackage
target: Používá se pro soubory mimo .BuildOutputTargetFolder
TargetsForTfmSpecificBuildOutput
Napište vlastní cíl a zadejte ho $(TargetsForTfmSpecificBuildOutput)
jako hodnotu vlastnosti. Pro všechny soubory, které potřebují přejít do BuildOutputTargetFolder
knihovny (lib ve výchozím nastavení), by měl cíl tyto soubory zapsat do skupiny ItemGroup BuildOutputInPackage
a nastavit následující dvě hodnoty metadat:
FinalOutputPath
: Absolutní cesta k souboru; Pokud není k dispozici, použije se identita k vyhodnocení zdrojové cesty.TargetPath
: (Volitelné) Nastavte, když soubor musí přejít do podsložky v rámcilib\<TargetFramework>
, jako jsou satelitní sestavení, která procházejí pod příslušnými složkami jazykové verze. Výchozí hodnota je název souboru.
Příklad:
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);GetMyPackageFiles</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="GetMyPackageFiles">
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)cs\$(AssemblyName).resources.dll">
<TargetPath>cs</TargetPath>
</BuildOutputInPackage>
</ItemGroup>
</Target>
TargetsForTfmSpecificContentInPackage
Napište vlastní cíl a zadejte ho $(TargetsForTfmSpecificContentInPackage)
jako hodnotu vlastnosti. Aby se do balíčku zahrnuly všechny soubory, měl by cíl tyto soubory zapsat do skupiny ItemGroup TfmSpecificPackageFile
a nastavit následující volitelná metadata:
PackagePath
: Cesta, kde má být soubor výstupem v balíčku. NuGet zobrazí upozornění, pokud je do stejné cesty balíčku přidáno více souborů.BuildAction
: Akce sestavení, která se má přiřadit k souboru, je nutná pouze v případě, že je cesta k balíčku vecontentFiles
složce. Výchozí hodnota je Žádná.
Příklad:
<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>
obnovení cíle
MSBuild -t:restore
(které nuget restore
a dotnet restore
používá se projekty .NET Core), obnoví balíčky odkazované v souboru projektu následujícím způsobem:
- Čtení všech odkazů na projekt
- Čtení vlastností projektu a vyhledání zprostředkující složky a cílových architektur
- Předat MSBuild data do NuGet. Build.Tasks.dll
- Spuštění obnovení
- Stažení balíčků
- Zápis souboru, cílů a bodů prostředků
Cíl restore
funguje pro projekty ve formátu PackageReference.
MSBuild 16.5+
má také podporu výslovného souhlasu s formátempackages.config
.
Poznámka:
Cíl restore
by neměl být spuštěn v kombinaci s build
cílem.
Obnovit vlastnosti
Další nastavení obnovení můžou pocházet z MSBuild vlastností v souboru projektu. Hodnoty lze také nastavit z příkazového -p:
řádku pomocí přepínače (viz příklady níže).
Vlastnost | Popis |
---|---|
RestoreSources |
Seznam zdrojů balíčků oddělený středníkem |
RestorePackagesPath |
Cesta ke složce balíčků uživatelů |
RestoreDisableParallel |
Omezit stahování na jeden po druhém. |
RestoreConfigFile |
Cesta k Nuget.Config souboru, který se má použít. |
RestoreNoHttpCache |
Pokud je pravda, vyhněte se používání balíčků uložených v mezipaměti http. Viz Správa globálních balíčků a složek mezipaměti. |
RestoreIgnoreFailedSources |
Pokud je true, ignoruje selhávající nebo chybějící zdroje balíčků. |
RestoreFallbackFolders |
Náhradní složky, které se používají stejným způsobem jako složka balíčků uživatelů. |
RestoreAdditionalProjectSources |
Další zdroje, které se mají použít během obnovení. |
RestoreAdditionalProjectFallbackFolders |
Další záložní složky, které se mají použít během obnovení. |
RestoreAdditionalProjectFallbackFoldersExcludes |
Vyloučení náhradních složek zadaných v RestoreAdditionalProjectFallbackFolders |
RestoreTaskAssemblyFile |
Cesta k NuGet.Build.Tasks.dll . |
RestoreGraphProjectInput |
Seznam projektů oddělených středníkem, které mají být obnoveny, které by měly obsahovat absolutní cesty. |
RestoreUseSkipNonexistentTargets |
Když se projekty shromažďují prostřednictvím MSBuild něj, určuje, jestli se shromažďují pomocí SkipNonexistentTargets optimalizace. Pokud není nastaveno, použije se výchozí hodnota true . Výsledkem je rychlé chování při selhání, pokud cíle projektu nelze importovat. |
MSBuildProjectExtensionsPath |
Výstupní složka, výchozí hodnota BaseIntermediateOutputPath složky a obj složka. |
RestoreForce |
V projektech založených na PackageReference vynutí vyřešení všech závislostí, i když bylo poslední obnovení úspěšné. Určení tohoto příznaku project.assets.json je podobné odstranění souboru. Tím nedojde k obejití mezipaměti http-cache. |
RestorePackagesWithLockFile |
Přihlásí se k používání zamykacího souboru. |
RestoreLockedMode |
Spusťte obnovení v uzamčeném režimu. To znamená, že obnovení znovu nevyhodnotí závislosti. |
NuGetLockFilePath |
Vlastní umístění souboru zámku. Výchozí umístění je vedle projektu a má název packages.lock.json . |
RestoreForceEvaluate |
Vynutí obnovení, aby znovu zkompilovat závislosti a aktualizoval soubor zámku bez upozornění. |
RestorePackagesConfig |
Přepínač výslovného souhlasu, který obnoví projekty pomocí packages.config. Podpora pouze s MSBuild -t:restore . |
RestoreRepositoryPath |
packages.config. Určuje adresář balíčků, do kterého se mají balíčky obnovit. SolutionDirectory bude použita, pokud není zadána. |
RestoreUseStaticGraphEvaluation |
Přepínač výslovného souhlasu, který místo standardního vyhodnocení používá vyhodnocení statického grafu MSBuild . Vyhodnocení statického grafu je experimentální funkce, která je výrazně rychlejší pro velká úložiště a řešení. |
RestoreUseLegacyDependencyResolver |
Výslovný nesouhlas s používáním starší verze překladače závislostí. NuGetImplementace překladače závislostí byla přepsána ve verzi 6.12. Tento přepínač vynutí použití předchozího algoritmu. |
Vlastnost ExcludeRestorePackageImports
je interní vlastnost, kterou NuGetpoužívá .
Nemělo by být změněno ani nastaveno v žádných MSBuild souborech.
Příklady
Příkazový řádek:
msbuild -t:restore -p:RestoreConfigFile=<path>
Soubor projektu:
<PropertyGroup>
<RestoreIgnoreFailedSources>true</RestoreIgnoreFailedSources>
</PropertyGroup>
Obnovení výstupů
Obnovení vytvoří ve složce sestavení obj
následující soubory:
Soubor | Popis |
---|---|
project.assets.json |
Obsahuje graf závislostí všech odkazů na balíčky. |
{projectName}.projectFileExtension.nuget.g.props |
Odkazy na MSBuild props obsažené v balíčcích |
{projectName}.projectFileExtension.nuget.g.targets |
Odkazy na MSBuild cíle obsažené v balíčcích |
Obnovení a sestavení jedním příkazem MSBuild
Vzhledem k tomu, že lze obnovit balíčky, NuGet které spouštějí MSBuild cíle a props, se spustí vyhodnocení obnovení a sestavení s různými globálními vlastnostmi. To znamená, že následující chování bude mít nepředvídatelné a často nesprávné chování.
msbuild -t:restore,build
Místo toho doporučujeme:
msbuild -t:build -restore
Stejná logika se vztahuje na jiné cíle podobné build
.
Obnovení projektů PackageReference a packages.config pomocí MSBuild
S verzemi MSBuild 16.5+ jsou podporovány msbuild -t:restore
také packages.config .
msbuild -t:restore -p:RestorePackagesConfig=true
Poznámka:
packages.config
obnovení je k dispozici pouze s MSBuild 16.5+
, a ne s dotnet.exe
Obnovení pomocí vyhodnocení statického MSBuild grafu
Poznámka:
Ve MSBuild verzi 16.6+ byla přidána experimentální funkce pro použití vyhodnocení statického grafu z příkazového řádku, NuGet která výrazně zlepšuje dobu obnovení velkých úložišť.
msbuild -t:restore -p:RestoreUseStaticGraphEvaluation=true
Případně ji můžete povolit nastavením vlastnosti v adresáři.Build.Props.
<Project>
<PropertyGroup>
<RestoreUseStaticGraphEvaluation>true</RestoreUseStaticGraphEvaluation>
</PropertyGroup>
</Project>
Poznámka:
Od sady Visual Studio 2019.x a NuGet 5.x se tato funkce považuje za experimentální a opt-in. Podrobnosti o tom, kdy bude tato funkce ve výchozím nastavení povolená, najdete v NuGetsouboru /Home#9803 .
Statické obnovení grafu změní msbuild část obnovení, čtení a vyhodnocení projektu, ale ne algoritmus obnovení. Algoritmus obnovení je stejný ve všech NuGet nástrojích (NuGet.exe, MSBuild.exe, dotnet.exe a Visual Studio).
Ve velmi několika scénářích se statické obnovení grafu může chovat jinak než aktuální obnovení a některé deklarované PackageReferences nebo ProjectReferences můžou chybět.
Při jednorázové kontrole při migraci na statické obnovení grafu zvažte spuštění:
msbuild.exe -t:restore -p:RestoreUseStaticGraphEvaluation=true
msbuild.exe -t:restore
NuGetby neměly hlásit žádné změny. Pokud se zobrazí nesrovnalosti, zapište problém na NuGetadrese /Home.
Nahrazení jedné knihovny z grafu obnovení
Pokud obnovení přináší nesprávné sestavení, je možné vyloučit výchozí volbu balíčků a nahradit ho vlastní volbou. Nejprve s nejvyšší úrovní PackageReference
vylučte všechny prostředky:
<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:
<Reference Include="Newtonsoft.Json.dll" />