Sdílet prostřednictvím


Úvod do NuGetu

Základním nástrojem pro jakoukoli moderní vývojovou platformu je mechanismus, pomocí kterého můžou vývojáři vytvářet, sdílet a využívat užitečný kód. Tento kód je často součástí "balíčků", které obsahují zkompilovaný kód (jako knihovny DLL) spolu s dalším obsahem potřebným v projektech, které tyto balíčky využívají.

Pro .NET (včetně .NET Core) je mechanismus podporovaný Microsoftem pro sdílení kódu NuGet, který definuje, jak se balíčky pro .NET vytvářejí, hostují a využívají a poskytují nástroje pro každou z těchto rolí.

Jednoduše řečeno, balíček NuGet je jeden soubor ZIP s příponou .nupkg, která obsahuje zkompilovaný kód (DLL), další soubory související s tímto kódem a popisný manifest, který obsahuje informace, jako je číslo verze balíčku. Vývojáři sdílející svůj kód vytvářejí balíčky a publikují je na veřejném nebo soukromém hostingu. Příjemci balíčků tyto balíčky získají od vhodných hostitelů, přidají je do svých projektů a pak v kódu projektu volají funkcionalitu balíčků. Samotný NuGet pak zpracuje všechny zprostředkující podrobnosti.

Vzhledem k tomu, že NuGet podporuje privátní hostitele společně s veřejným hostitelem nuget.org, můžete pomocí balíčků NuGet sdílet kód, který je výhradní pro organizaci nebo pracovní skupinu. Balíčky NuGet můžete také použít jako pohodlný způsob, jak strukturovat vlastní kód pro použití výhradně ve vlastních projektech. Stručně řečeno, balíček NuGet je sdílená jednotka kódu, ale nevyžaduje ani neznamená žádné konkrétní prostředky sdílení.

Tok balíčků mezi tvůrci, hostiteli a uživateli

Ve své roli jako veřejný hostitel udržuje NuGet centrální úložiště více než 100 000 jedinečných balíčků na nuget.org. Tyto balíčky každý den využívají miliony vývojářů .NET/.NET Core. NuGet také umožňuje hostovat balíčky soukromě v cloudu (například v Azure DevOps), v privátní síti nebo dokonce v místním systému souborů. Díky tomu jsou tyto balíčky k dispozici jenom vývojářům, kteří mají přístup k hostiteli a umožňují zpřístupnit balíčky konkrétní skupině uživatelů. Možnosti jsou vysvětleny v Hostování vlastních kanálů NuGet. Prostřednictvím možností konfigurace můžete také určit, ke kterým hostitelům může přistupovat jakýkoli daný počítač, a zajistit tak, aby balíčky byly získány z konkrétních zdrojů, a ne z veřejného úložiště, jako je nuget.org.

Ať už je její povaha jakákoliv, hostitel slouží jako bod spojení mezi tvůrci balíčků a spotřebiteli balíčků . Tvůrci vytvářejí užitečné balíčky NuGet a publikují je na hostiteli. Uživatelé pak vyhledávají užitečné a kompatibilní balíčky na přístupných hostitelích, stahují a zahrnují tyto balíčky do svých projektů. Po instalaci v projektu jsou rozhraní API balíčků k dispozici pro zbytek kódu projektu.

Vztah mezi tvůrci balíčků, hostiteli balíčků a příjemci balíčků

Cílení na kompatibilitu balíčků

"Kompatibilní" balíček znamená, že obsahuje sestavení sestavená alespoň pro jednu cílovou architekturu .NET, která jsou kompatibilní s cílovou architekturou projektu využívajícího. Vývojáři můžou vytvářet balíčky, které jsou specifické pro jednu architekturu, jako u ovládacích prvků UPW, nebo mohou podporovat širší škálu cílů. Aby se maximalizovala kompatibilita balíčku, vývojáři cílí na .NET Standard, které můžou využívat všechny projekty .NET a .NET Core. Toto je nejúčinnější způsob jak pro tvůrce, tak pro spotřebitele, protože jeden balíček (obvykle obsahující jedno sestavení) funguje pro všechny projekty, které využívají balíček.

Vývojáři balíčků, kteří vyžadují rozhraní API mimo .NET Standard, naopak vytvářejí samostatná sestavení pro různé cílové frameworky, které chtějí podporovat, a zahrnují všechna tato sestavení do stejného balíčku (což se nazývá "multitargeting"). Když příjemce takový balíček nainstaluje, NuGet extrahuje pouze sestavení potřebná projektem. Tím se minimalizuje stopa balíčku v konečné aplikaci a/nebo sestavení vytvořených tímto projektem. Balíček pro cílení na více cílů je samozřejmě pro tvůrce obtížnější udržovat.

Poznámka

Pokyny k komponentám aplikací a opakovaně použitelným knihovnám najdete v dokumentaci k .NET Standard v tématu.

Nástroje NuGet

Kromě podpory hostování poskytuje NuGet také řadu nástrojů, které používají tvůrci i spotřebitelé. Informace o získání konkrétních nástrojů najdete v tématu Instalace klientských nástrojů NuGet.

Nástroj Platformy Použitelné scénáře Popis
rozhraní příkazového řádku dotnet Všichni Vytvoření, spotřeba Nástroj CLI pro knihovny .NET Core a .NET Standard a pro projekty ve stylu sady SDK, které cílí na rozhraní .NET Framework (viz atribut SDK). Poskytuje určité funkce rozhraní příkazového řádku NuGet přímo v rámci řetězu nástrojů .NET Core. Stejně jako u nuget.exe CLI rozhraní příkazového řádku dotnet nepracuje s projekty sady Visual Studio.
nuget.exe rozhraní příkazového řádku Všichni Vytvoření, spotřeba Nástroj rozhraní příkazového řádku pro knihovny rozhraní .NET Framework a projekty, které nejsou stylem sady SDK, které cílí na knihovny .NET Standard. Poskytuje všechny funkce NuGet s některými příkazy, které se vztahují speciálně na tvůrce balíčků, některé platí jenom pro uživatele a jiné platí pro oba. Tvůrci balíčků například používají příkaz nuget pack k vytvoření balíčku z různých sestavení a souvisejících souborů, příjemci balíčků používají nuget install zahrnout balíčky do složky projektu a všichni používají nuget config k nastavení konfiguračních proměnných NuGet. Jako nástroj nezávislý na platformě nepracuje rozhraní příkazového řádku NuGet s projekty sady Visual Studio.
konzole správce balíčků Visual Studio ve Windows Spotřeba Poskytuje příkazy PowerShellu pro instalaci a správu balíčků v projektech sady Visual Studio.
Uživatelské rozhraní správce balíčků Visual Studio ve Windows Spotřeba Poskytuje snadno použitelné uživatelské rozhraní pro instalaci a správu balíčků v projektech sady Visual Studio.
Správa uživatelského rozhraní NuGet Visual Studio pro Mac Spotřeba Poskytuje snadno použitelné uživatelské rozhraní pro instalaci a správu balíčků v projektech Visual Studio pro Mac.
MSBuild Windows Vytvoření, spotřeba Poskytuje možnost vytvářet balíčky a obnovovat balíčky používané v projektu přímo prostřednictvím řetězce nástrojů MSBuild.

Jak vidíte, nástroje NuGet, se kterými pracujete, závisí výrazně na tom, jestli vytváříte, spotřebováváte nebo publikujete balíčky, a platformu, na které pracujete. Tvůrci balíčků jsou obvykle také příjemci, protože vycházejí z funkcí, které existují v jiných balíčcích NuGet. A tyto balíčky samozřejmě můžou záviset na dalších.

Další informace najdete v článcích o pracovním postupu vytváření balíčků a a pracovním postupu spotřeby balíčků a.

Správa závislostí

Schopnost snadno vytvářet práci ostatních je jednou z nejvýkonnějších funkcí systému správy balíčků. Proto většina toho, co NuGet dělá, spravuje tento strom závislostí nebo "graf" jménem projektu. Jednoduše řečeno, potřebujete se zabývat pouze těmito balíčky, které přímo používáte v projektu. Pokud některý z těchto balíčků sám využívá další balíčky (které pak můžou využívat i další), NuGet se postará o všechny tyto závislosti na nižší úrovni.

Následující obrázek znázorňuje projekt, který závisí na pěti balíčcích, které zase závisí na řadě dalších.

příklad grafu závislostí NuGet pro projekt .NET

Všimněte si, že některé balíčky se v grafu závislostí zobrazují několikrát. Existují například tři různí příjemci balíčku B a každý příjemce může také zadat jinou verzi tohoto balíčku (nezobrazuje se). Jedná se o běžný výskyt, zejména pro široce používané balíčky. NuGet naštěstí pracuje na tom, aby přesně určil, která verze balíčku B splňuje všechny uživatele. NuGet pak udělá totéž pro všechny ostatní balíčky bez ohledu na to, jak hluboko je graf závislostí.

Další podrobnosti o tom, jak NuGet tuto službu provádí, najdete v tématu řešení závislostí.

Sledování referencí a obnovení balíčků

Vzhledem k tomu, že se projekty můžou snadno přesouvat mezi vývojářskými počítači, úložišti správy zdrojového kódu, sestavovat servery atd., je velmi nepraktické zachovat binární sestavení balíčků NuGet přímo vázaná na projekt. Tímto způsobem by se každá kopie projektu zbytečně nadměrně zvětšila (a tím by se plýtval prostor v úložištích verzí). Také by bylo velmi obtížné aktualizovat binární soubory balíčků na novější verze, protože aktualizace by se musely použít ve všech kopiích projektu.

NuGet místo toho udržuje jednoduchý referenční seznam balíčků, na kterých projekt závisí, včetně závislostí nejvyšší i nižší úrovně. To znamená, že při každé instalaci balíčku z některého hostitele do projektu nuGet zaznamená identifikátor balíčku a číslo verze v referenčním seznamu. (Odinstalace balíčku jej samozřejmě odebere ze seznamu.) NuGet poté poskytuje způsob obnovení všech odkazovaných balíčků na vyžádání, jak je popsáno v Obnovení balíčku.

při instalaci balíčku se vytvoří referenční seznam NuGet a dá se použít k obnovení balíčků jinde

Pouze s referenčním seznamem může NuGet přeinstalovat – to znamená obnovit– všechny tyto balíčky z veřejných a/nebo privátních hostitelů kdykoli později. Při potvrzení projektu do správy zdrojového kódu nebo jeho sdílení jiným způsobem zahrnete pouze referenční seznam a vyloučíte všechny binární soubory balíčků (viz Balíčky a správa zdrojového kódu.)

Počítač, který obdrží projekt, například server sestavení, který získá kopii projektu jako součást systému automatizovaného nasazení, jednoduše požádá NuGet o obnovení závislostí, kdykoli je to potřeba. Pro tento přesný účel poskytují systémy, jako je Azure DevOps, kroky obnovení NuGet. Podobně když vývojáři získají kopii projektu (jako při klonování úložiště), můžou vyvolat příkaz, jako je nuget restore (rozhraní příkazového řádku NuGet), dotnet restore (rozhraní příkazového řádku dotnet) nebo Install-Package (konzola Správce balíčků), aby získali všechny potřebné balíčky. Visual Studio ve své části automaticky obnoví balíčky při vytváření projektu (za předpokladu, že je povolené automatické obnovení, jak je popsáno v obnovení balíčku).

Je zřejmé, že primární role NuGetu, kde se vývojáři zabývají, udržuje tento referenční seznam jménem vašeho projektu a poskytuje prostředky pro efektivní obnovení (a aktualizaci) těchto odkazovaných balíčků. Tento seznam se udržuje v jednom ze dvou formátů správy balíčků , jak se nazývají:

  • PackageReference (nebo "odkazy na balíčky v souborech projektu") | (NuGet 4.0+) Udržuje seznam závislostí nejvyšší úrovně projektu přímo v souboru projektu, takže není potřeba žádný samostatný soubor. Přidružený soubor obj/project.assets.jsonse dynamicky generuje za účelem správy celkového grafu závislostí balíčků, které projekt používá spolu se všemi závislostmi nižší úrovně. PackageReference je vždy používán projekty .NET Core.

  • packages.config: (NuGet 1.0+) soubor XML, který udržuje plochý seznam všech závislostí v projektu, včetně závislostí jiných nainstalovaných balíčků. Nainstalované nebo obnovené balíčky jsou uloženy ve složce packages.

Který formát správy balíčků se používá v libovolném projektu, závisí na typu projektu a na dostupné verzi NuGetu (nebo v sadě Visual Studio). Pokud chcete zkontrolovat, jaký formát se používá, stačí po instalaci prvního balíčku vyhledat packages.config v kořenovém adresáři projektu. Pokud tento soubor nemáte, vyhledejte v souboru projektu přímo prvek <PackageReference>.

Pokud máte na výběr, doporučujeme použít PackageReference. packages.config se udržuje pro účely kompatibility se staršími systémy a již není pod aktivním vývojem.

(Only if applicable based on context. No improvements needed if "tip" refers to a financial gratuity.)

Různé nuget.exe příkazy rozhraní příkazového řádku, jako nuget install, nepřidávejte balíček do referenčního seznamu automaticky. Seznam se aktualizuje při instalaci balíčku pomocí Správce balíčků sady Visual Studio (uživatelské rozhraní nebo konzola) a pomocí rozhraní příkazového řádku dotnet.exe.

Co ještě NuGet dělá?

Zatím jste se seznámili s následujícími vlastnostmi NuGetu:

  • NuGet poskytuje centrální úložiště nuget.org s podporou privátního hostování.
  • NuGet poskytuje vývojářům nástrojů, které potřebují k vytváření, publikování a využívání balíčků.
  • Nejdůležitější je, že NuGet udržuje referenční seznam balíčků používaných v projektu a možnost obnovit a aktualizovat tyto balíčky z tohoto seznamu.

Aby tyto procesy fungovaly efektivně, NuGet provede některé optimalizace na pozadí. Nejvýznamněji NuGet spravuje mezipaměť balíčků a globální složku balíčků, aby urychlilo instalaci a přeinstalaci. Mezipaměť se vyhne stahování balíčku, který už je na počítači nainstalovaný. Globální složka balíčků umožňuje více projektům sdílet stejný nainstalovaný balíček, čímž se sníží celková stopa NuGetu na počítači. Složka s mezipamětí a globálními balíčky jsou také velmi užitečná, když často obnovujete větší počet balíčků jako na buildovém serveru. Další podrobnosti o těchto mechanismech najdete v tématu Správa globálních balíčků a složek mezipaměti.

V rámci jednotlivých projektů spravuje NuGet celkový graf závislostí, který znovu zahrnuje překlad více odkazů na různé verze stejného balíčku. Je docela běžné, že projekt přebírá závislost na jednom nebo více balíčcích, které mají stejné závislosti. Některé z nejužitečnějších balíčků nástrojů na nuget.org jsou používány mnoha dalšími balíčky. V celém grafu závislostí pak můžete mít snadno deset různých odkazů na různé verze stejného balíčku. Aby se zabránilo přenesení více verzí tohoto balíčku do samotné aplikace, NuGet seřadí, kterou jednu verzi můžou používat všichni příjemci. (Další informace najdete v tématu řešení závislostí.)

Kromě toho NuGet udržuje všechny specifikace týkající se strukturování balíčků (včetně lokalizace a symbolů ladění) a způsobu, jak jsou odkazovány (včetně rozsahů verzí a předběžných verzí). NuGet také poskytuje různá rozhraní API pro práci se službami programově a poskytuje podporu vývojářům, kteří píší rozšíření pro Visual Studio a šablony projektů.

Věnujte chvíli prozkoumání obsahu této dokumentace, kde jsou reprezentovány veškeré tyto schopnosti spolu s poznámkami k vydání sahajícími až do počátků NuGetu.

Najděte videa NuGet na Channel 9 a YouTube.

Komentáře, příspěvky a problémy

Nakonec velmi vítáme komentáře a příspěvky k této dokumentaci – stačí vybrat příkazy Zpětná vazba a Upravit na libovolné stránce nebo navštívit úložiště dokumentace a seznam problémů na GitHubu.

Vítáme také příspěvky samotného NuGetu prostřednictvím svých různých úložišť GitHubu; Problémy s NuGetem najdete na https://github.com/NuGet/home/issues.

Užijte si prostředí NuGet!