Úvod do NuGetAn introduction to NuGet

Základní nástroj pro libovolnou platformu pro vývoj moderních je mechanismus, pomocí kterého mohou vývojáři vytvářet, sdílet a využívat užitečné kódu.An essential tool for any modern development platform is a mechanism through which developers can create, share, and consume useful code. Takový kód je často seskupeny do "packages", které obsahují zkompilovaný kód (jako knihovny DLL) společně s další obsah, je potřeba v projektů, které využívají tyto balíčky.Often such code is bundled into "packages" that contain compiled code (as DLLs) along with other content needed in the projects that consume these packages.

Pro platformu .NET, je podporováno Microsoft mechanismus pro sdílení kódu NuGet, který definuje jak balíčky pro rozhraní .NET vytvářené hostované a využívat a poskytuje nástroje pro každou z těchto rolí.For .NET, the Microsoft-supported mechanism for sharing code is NuGet, which defines how packages for .NET are created, hosted, and consumed, and provides the tools for each of those roles.

Uveďte, jednoduše NuGet je balíček jednoho souboru ZIP s .nupkg rozšíření, která obsahuje zkompilovaný kód (DLL), ostatní soubory související s tímto kódem a popisný manifestu, který obsahuje informace, jako číslo verze balíčku.Put simply, a NuGet package is a single ZIP file with the .nupkg extension that contains compiled code (DLLs), other files related to that code, and a descriptive manifest that includes information like the package's version number. Sdílení vývojáři kódem vytváření balíčků a publikovat je do veřejných nebo privátních hostitele.Developers with code to share create packages and publish them to a public or private host. Balíček příjemci získat tyto balíčky z vhodné hostitele, přidejte je do jejich projektů a pak volání funkce balíčku v jejich kód projektu.Package consumers obtain those packages from suitable hosts, add them to their projects, and then call a package's functionality in their project code. NuGet samotné pak zpracovává všechny zprostředkující podrobnosti.NuGet itself then handles all of the intermediate details.

Protože NuGet podporuje privátní hostitele spolu s hostiteli veřejné nuget.org, můžete sdílet kód, který je určena výhradně pro organizaci nebo pracovní skupině balíčky NuGet.Because NuGet supports private hosts alongside the public nuget.org host, you can use NuGet packages to share code that's exclusive to an organization or a workgroup. Balíčky NuGet můžete použít také jako pohodlný způsob zohlednit vlastní kód pro použití v nic ale vašich vlastních projektů.You can also use NuGet packages as a convenient way to factor your own code for use in nothing but your own projects. Stručně řečeno, balíček NuGet je ke sdílení jednotka kódu, ale není vyžadovat ani implikují žádné konkrétní znamená sdílení.In short, a NuGet package is a shareable unit of code, but does not require nor imply any particular means of sharing.

Tok balíčky mezi tvůrcích, hostitele a spotřebiteléThe flow of packages between creators, hosts, and consumers

V jeho role jako veřejný hostitel udržuje NuGet samotné centrálním úložištěm více než 100 000 jedinečné balíčky v nuget.org. Tyto balíčky jsou zaměstnaní miliony vývojářů .NET každý den.In its role as a public host, NuGet itself maintains the central repository of over 100,000 unique packages at nuget.org. These packages are employed by millions of .NET developers every day. NuGet můžete taky hostitele balíčků soukromě v cloudu (například na Visual Studio Team Services), v privátní síti, nebo dokonce i v právě do místního systému souborů.NuGet also enables you to host packages privately in the cloud (such as on Visual Studio Team Services), on a private network, or even on just your local file system. Díky tomu jsou tyto balíčky k dispozici pouze vývojáři, kteří mají přístup k hostiteli, což vám umožní zpřístupnit balíčky na konkrétní skupinu spotřebitelů.By doing so, those packages are available to only those developers that have access to the host, giving you the ability to make packages available to a specific group of consumers. Možnosti jsou vysvětlené na hostování vlastními kanály NuGet.The options are explained on Hosting your own NuGet feeds. Pomocí možnosti konfigurace můžete taky řídit, přesně které hostitele je přístupný pomocí libovolného daného počítače a zajistí tak, že balíčky jsou získány z konkrétní zdroje namísto veřejného úložiště jako nuget.org.Through configuration options, you can also control exactly which hosts can be accessed by any given computer, thereby ensuring that packages are obtained from specific sources rather than a public repository like nuget.org.

Ať jeho povahy, hostitel slouží jako bod připojení mezi balíček creators a balíček příjemci.Whatever its nature, a host serves as the point of connection between package creators and package consumers. Tvůrci sestavení užitečné balíčků NuGet a publikovat je na hostiteli.Creators build useful NuGet packages and publish them to a host. Příjemci knihovny vyhledejte užitečné a kompatibilní balíčky v přístupné hostitelích, stahování a zahrnutí tyto balíčky do jejich projektů.Consumers then search for useful and compatible packages on accessible hosts, downloading and including those packages in their projects. Po instalaci v projektu, rozhraní API se balíčky jsou k dispozici s ostatními kód projektu.Once installed in a project, the packages' APIs are available to the rest of the project code.

Vztah mezi creators balíčku, balíčku hostitelů a spotřebitelé balíčku

Balíček zaměřený na kompatibilityPackage targeting compatibility

"Kompatibilní" balíček znamená, že obsahuje sestavení vytvořené pro rozhraní .NET framework minimálně jeden cíl, který je kompatibilní s cílový framework projektu na využívání.A "compatible" package means that it contains assemblies built for at least one target .NET framework that's compatible with the consuming project's target framework. Vývojáři mohou vytvořit balíčky, které jsou specifické pro jeden prostředí, stejně jako u UWP ovládací prvky, nebo mohou podporovat většímu počtu cílů.Developers can create packages that are specific to one framework, as with UWP controls, or they can support a wider range of targets. Maximalizovat kompatibilitu balíček, vývojáři cíl .NET Standard, které může využívat všechny projekty rozhraní .NET.To maximize a package's compatibility, developers target .NET Standard, which all .NET projects can consume. Toto je nejúčinnější způsob pro creators i příjemci, jako jednoho balíčku (obvykle obsahující jednoho sestavení) se dá použít na všechny projekty náročná.This is the most efficient means for both creators and consumers, as a single package (usually containing a single assembly) works for all consuming projects.

Balíček vývojáře, kteří potřebují rozhraní API mimo standardní .NET na druhé straně vytvořit samostatné sestavení pro různé cílové rozhraní, které chtějí podporovat a zahrnout všechny tyto sestavení stejného balíčku (což se označuje jako "cílení na více").Package developers who require APIs outside of .NET Standard, on the other hand, create separate assemblies for the different target frameworks they want to support and include all of those assemblies in the same package (which is called "multi-targeting"). Při instalaci příjemce takový balíček NuGet extrahuje pouze sestavení, které jsou vyžadovány projektu.When a consumer installs such a package, NuGet extracts only those assemblies that are needed by the project. Tím se minimalizují nároky balíčku v konečné aplikace nebo sestavení vyprodukované daného projektu.This minimizes the package's footprint in the final application and/or assemblies produced by that project. Cílení na více balíček Pokud kurzu pro jeho autorovi udržovat obtížnější.A multi-targeting package if, of course, more difficult for its creator to maintain.

Poznámka

Cílení na rozhraní .NET standardní nahrazuje předchozí postup použití různých "knihovny přenosných tříd" (PCL) cíle.Targeting .NET Standard supercedes the previous approach of using various "portable class library" (PCL) targets. Tato dokumentace se proto zaměřuje na vytvoření balíčků pro .NET Standard.This documentation therefore focuses on creating packages for .NET Standard.

Nástroje pro NuGetNuGet tools

Kromě hostování podpory, NuGet také poskytuje celou řadu nástrojů používané creators a spotřebitelé:In addition to hosting support, NuGet also provides a variety of tools used by both creators and consumers:

NástrojTool PlatformyPlatforms Použít scénářeApplicable Scenarios PopisDescription
nuget.exe CLInuget.exe CLI VšechnyAll Vytváření, spotřebaCreation, Consumption Nabízí všechny funkce NuGet, se některé příkazy platného pro balíček tvůrcích, použití pouze k příjemce, a ostatní použití na obojí.Provides all NuGet capabilities, with some commands applying specifically to package creators, some applying only to consumers, and others applying to both. Například balíček creators použití nuget pack příkazu vytvořit balíček z různých sestavení a související soubory, balíček příjemci použití nuget install mají být zahrnuty balíčků ve složce projektu a everyone používá nuget config nastavit konfiguraci NuGet proměnné.For example, package creators use the nuget pack command to create a package from various assemblies and related files, package consumers use nuget install to include packages in a project folder, and everyone uses nuget config to set NuGet configuration variables. Jako nástroj bez ohledu na platformu rozhraní příkazového řádku NuGet nekomunikuje s projektů sady Visual Studio.As a platform-agnostic tool, the NuGet CLI does not interact with Visual Studio projects.
dotnet CLIdotnet CLI VšechnyAll Vytváření, spotřebaCreation, Consumption Poskytuje rozhraní příkazového řádku určité NuGet možnosti přímo v řetězu nástroj .NET Core.Provides certain NuGet CLI capabilities directly within the .NET Core tool chain. Stejně jako u rozhraní příkazového řádku NuGet dotnet rozhraní příkazového řádku nekomunikuje s projektů sady Visual Studio.As with the NuGet CLI, the dotnet CLI does not interact with Visual Studio projects.
Konzola Správce balíčkůPackage Manager Console Visual Studio v systému WindowsVisual Studio on Windows SpotřebaConsumption Poskytuje příkazy prostředí PowerShell k instalaci a správě balíčků v projektech Visual Studio.Provides PowerShell commands for installing and managing packages in Visual Studio projects.
Uživatelské rozhraní Správce balíčkůPackage Manager UI Visual Studio v systému WindowsVisual Studio on Windows SpotřebaConsumption Poskytuje snadno použitelné uživatelské rozhraní pro instalaci a správě balíčků v projektech Visual Studio.Provides an easy-to-use UI for installing and managing packages in Visual Studio projects.
Spravovat NuGet uživatelského rozhraníManage NuGet UI Visual Studio for MacVisual Studio for Mac SpotřebaConsumption Zadejte snadno použitelné uživatelské rozhraní pro instalaci a správě balíčků v sadě Visual Studio pro Mac projekty.Provide an easy-to-use UI for installing and managing packages in Visual Studio for Mac projects.
MSBuildMSBuild WindowsWindows Vytváření, spotřebaCreation, Consumption Umožňuje vytvořit balíčky a balíčky v projektu přímo přes řetězu nástroje MSBuild použité obnovení.Provides the ability to create packages and restore packages used in a project directly through the MSBuild tool chain.

Jak vidíte, nástroje NuGet, které pracujete s velmi lišit v závislosti na tom, zda vytváříte, využívání nebo publikování balíčků a platformy, na kterém pracujete.As you can see, the NuGet tools you work with depend greatly on whether you're creating, consuming, or publishing packages, and the platform on which you're working. Tvůrci balíčku jsou obvykle také příjemci, při vytváření nad funkce, která existuje v dalších balíčcích NuGet.Package creators are typically also consumers, as they build on top of functionality that exists in other NuGet packages. A tyto balíčky samozřejmě může zase závisí na ještě jiné.And those packages, of course, may in turn depend on still others.

Další informace, začínat pracovní postup vytvoření balíčku a balíček spotřeba pracovního postupu články.For more information, start with the Package creation workflow and Package consumption workflow articles.

Správa závislostíManaging dependencies

Umožňuje snadno vytvářet na práci jiných je jedním z nejúčinnějších funkce systém správy balíčků.The ability to easily build on the work of others is one of most powerful features of a package management system. Podle toho hodně jaké NuGet spravuje tento strom závislosti nebo "grafu" jménem projektu.Accordingly, much of what NuGet does is managing that dependency tree or "graph" on behalf of a project. Jednoduše řečeno, budete potřebovat vztahuje pouze na sami s balíčky, které přímo používáte v projektu.Simply said, you need only concern yourself with those packages that you're directly using in a project. Pokud žádný z těchto balíčků sami využívat jiné balíčky (které, pak spotřebovat stále ostatní), má na starosti NuGet všechny tyto závislosti nižší úrovně.If any of those packages themselves consume other packages (which can, in turn, consume still others), NuGet takes care of all those down-level dependencies.

Následující obrázek znázorňuje projekt, který závisí na pět balíčků, které pak závisí na několika jiných.The following image shows a project that depends on five packages, which in turn depend on a number of others.

Příklad NuGet závislost grafu pro rozhraní .NET projektu

Všimněte si, že některé balíčky zobrazí v grafu závislostí vícekrát.Notice that some packages appear multiple times in the dependency graph. Například existují tři různé zákazníci balíčku B a každý příjemce může také zadejte jinou verzi pro tento balíček (není vidět).For example, there are three different consumers of package B, and each consumer might also specify a different version for that package (not shown). To je běžné v situaci, zejména pro nejběžněji používané balíčky.This is a common occurrence, especially for widely-used packages. NuGet naštěstí vykonává všechnu práci pevný k určení přesně kterou verzi balíčku B splňuje všichni příjemci.NuGet fortunately does all the hard work to determine exactly which version of package B satisfies all consumers. NuGet pak dělá to stejné pro všechny ostatní balíčky, bez ohledu na to, jak hluboko graf závislostí.NuGet then does the same for all other packages, no matter how deep the dependency graph.

Další informace o tom, jak NuGet provede této služby najdete v tématu řešení závislostí.For more details on how NuGet performs this service, see Dependency resolution.

Sledování odkazů a obnovení balíčkůTracking references and restoring packages

Protože projekty můžou snadno přesunout mezi počítači vývojáře, zdrojová ovládací prvek úložiště, servery sestavení a atd., je vysoce nepraktické zachovat binární sestavení z balíčků NuGet přímo spojen s projektem.Because projects can easily move between developer computers, source control repositories, build servers, and so forth, it's highly impractical to keep binary assemblies from NuGet packages directly bound to a project. To by to vytvořit každou kopii zbytečně opakovaném projektu (a tím odpady místa v zdrojová ovládací prvek úložiště).Doing so would this make each copy of the project unnecessarily bloated (and thereby waste space in source control repositories). Ho by způsobují, že velmi obtížné aktualizovat binární soubory balíčku na novější verze, které aktualizace se vztahovat na celou všechny kopie projektu.It would also make it very difficult to update package binaries to newer versions as updates would have to be applied across all copies of the project.

NuGet místo uchovává jednoduchý odkaz seznam balíčků, na kterých závisí na projekt včetně závislosti nejvyšší úrovně a nižší úrovně.NuGet instead maintains a simple reference list of the packages upon which a project depends, including both top-level and down-level dependencies. To znamená vždy, když nainstalovat balíček z některé hostitele do projektu, NuGet zaznamenává identifikátor balíčku a číslo verze v seznamu odkaz.That is, whenever you install a package from some host into a project, NuGet records the package identifier and version number in the reference list. (Odinstalaci balíčku, samozřejmě odstraní ji ze seznamu.) NuGet pak poskytuje prostředky ke obnovit všechny odkazované balíčky na vyžádání, jak je popsáno na obnovení balíčků.(Uninstalling a package, of course, removes it from the list.) NuGet then provides a means to restore all referenced packages upon request, as described on Package restore.

Je vytvořen na instalace balíčku NuGet referenční seznam a slouží k obnovení balíčků jinde

S pouze seznam odkazů, můžete znovu NuGet—tedy obnovení—všech těchto balíčků z veřejné nebo soukromé hostitelů kdykoli později.With only the reference list, NuGet can then reinstall—that is, restore—all of those packages from public and/or private hosts at any later time. Při potvrzování projektu do správy zdrojového kódu nebo sdílení jiným způsobem, můžete zahrnout pouze seznam odkazů a vyloučit všechny binární soubory balíčku (viz balíčky a Správa zdrojového kódu.)When committing a project to source control, or sharing it in some other way, you include only the reference list and exclude any package binaries (see Packages and source control.)

Počítač, který obdrží projektu, například server sestavení získat kopii projektu v rámci systému automatického nasazení, jednoduše požádá NuGet vždy, když už jste zapotřebí obnovit závislosti.The computer that receives a project, such as a build server obtaining a copy of the project as part of an automated deployment system, simply asks NuGet to restore dependencies whenever they're needed. Sestavte systémy jako Visual Studio Team Services popisují "NuGet restore" pro tento účel přesný.Build systems like Visual Studio Team Services provide "NuGet restore" steps for this exact purpose. Podobně když vývojáři získejte kopii souboru projektu (stejně jako při klonování úložiště), se může vyvolat příkaz jako nuget restore (NuGet rozhraní příkazového řádku), dotnet restore (dotnet rozhraní příkazového řádku), nebo Install-Package (konzolu Správce balíčků) a získat všechny nezbytné balíčků.Similarly, when developers obtain a copy of a project (as when cloning a repository), they can invoke a command like nuget restore (NuGet CLI), dotnet restore (dotnet CLI), or Install-Package (Package Manager Console) to obtain all the necessary a packages. Visual Studio pro jeho část automaticky obnoví balíčky při vytváření projektu.Visual Studio, for its part, automatically restores packages when building a project.

Je zřejmé pak NuGet primární roli, kde jsou příslušné vývojáři udržuje tento odkaz seznam jménem projektu a poskytuje možnosti pro efektivní obnovení (a aktualizovat) tyto odkazované balíčky.Clearly, then, NuGet's primary role where developers are concerned is maintaining that reference list on behalf of your project and providing the means to efficiently restore (and update) those referenced packages. Tento seznam se udržuje v jednom ze dvou balíček správy formáty, jak se nazývají se:This list is maintained in one of two package management formats, as they're called:

  • packages.config: (NuGet 1.0 +) soubor ve formátu XML, který udržuje plochý seznam všechny závislosti v projektu, včetně závislostí jiné nainstalované balíčky.packages.config: (NuGet 1.0+) An XML file that maintains a flat list of all dependencies in the project, including the dependencies of other installed packages.
  • PackageReference (nebo "balíček odkazy v souborech projektu") | (NuGet 4.0 +) udržuje seznam nejvyšší úrovně závislosti projektu přímo v souboru projektu, aby bylo možné žádný samostatný soubor.PackageReference (or "package references in project files") | (NuGet 4.0+) Maintains a list of a project's top-level dependencies directly within the project file, so no separate file is needed. Přidružený soubor, project.assets.json, se dynamicky vygeneruje ke správě celkové graf závislostí.An associated file, project.assets.json, is dynamically generated to manage the overall dependency graph.

Formát balíčku správy zaměstnání v jakékoli dané projektu závisí na typu projektu a dostupná verze NuGet (nebo v sadě Visual Studio).Which package management format is employed in any given project depends on the project type, and the available version of NuGet (and/or Visual Studio). Pokud chcete zkontrolovat, jaký formát se používá, jednoduše vyhledejte packages.config v kořenu projektu po instalaci vašeho prvního balíčku.To check what format is being used, simply look for packages.config in the project root after installing your first package. Pokud není tento soubor hledat v souboru projektu přímo pro <PackageReference>element.If you don't that file, look in the project file directly for a <PackageReference>element.

Co dalšího NuGet dělá?What else does NuGet do?

Když, pokud jste se naučili následující vlastnosti balíčku nuget:So far you've learned the following characteristics of NuGet:

  • NuGet poskytuje centrální nuget.org úložiště s podporou pro privátní hostování.NuGet provides the central nuget.org repository with support for private hosting.
  • NuGet poskytuje že vývojářům nástroje pro vytváření, publikování a využívání balíčky potřebovat.NuGet provides the tools developers need for creating, publishing, and consuming packages.
  • Co je nejdůležitější – NuGet udržuje odkaz na seznam balíčků v projektu a možnost umožňuje obnovit a aktualizovat tyto balíčky z tohoto seznamu.Most importantly, NuGet maintains a reference list of packages used in a project and the ability to restore and update those packages from that list.

Chcete-li tyto procesy efektivní práci, nemá NuGet některé servisní optimalizace.To make these processes work efficiently, NuGet does some behind-the-scenes optimizations. Zejména NuGet spravuje obou celý počítač a ukládá do mezipaměti specifické pro projekt balíček na místní instalace a přeinstalace.Most notably, NuGet manages both computer-wide and project-specific package caches to shortcut installation and reinstallation. Pokud jde o mezipaměť platná pro celý počítač, všechny balíček, který si stáhnout a nainstalovat v projektu je uložený v mezipaměti, tak, aby instalace stejného balíčku v jiném projektu není zpoplatněná jiné stahování.Where the computer-wide cache is concerned, any package that you download and install in a project is stored in the cache, such that installing the same package in another project doesn't incur another download. To je jasně velmi užitečné při se často obnovení větší počet balíčků, protože na serveru sestavení.This is clearly very helpful when you're frequently restoring a larger number of packages, as on a build server. Další podrobnosti pro tento mechanismus a jak s ním pracovat najdete v tématu Správa mezipaměti NuGet.For more details on the mechanism and how to work with it, see Managing the NuGet cache.

V rámci jednotlivých projektů spravuje NuGet celkové graf závislostí, která znovu obsahuje několik odkazů na různé verze stejného balíčku řešení.Within an individual project, NuGet manages the overall dependency graph, which again includes resolving multiple references to different versions of the same package. Je celkem běžné, že projektu trvá závislost na jeden nebo více balíčků, aby sami mají stejné závislosti.It's quite common that a project takes a dependency on one or more packages that themselves have the same dependencies. Některé balíčky nejužitečnější nástroj na nuget.org zaměstnává mnoho dalších balíčků.Some of the most useful utility packages on nuget.org are employed by many other packages. V tomto grafu celý závislostí pak můžete snadno mít deset jiné odkazy na různé verze stejného balíčku.In the entire dependency graph, then, you could easily have ten different references to different versions of the same package. Abyste se vyhnuli, přináší několik verzí tohoto balíčku do vlastní aplikace, NuGet seřadí se které jedna verze mohou využívat všichni příjemci.To avoid bringing multiple versions of that package into the application itself, NuGet sorts out which single version can be used by all consumers. (Další informace najdete v tématu řešení závislostí.)(For more information, see Dependency Resolution.)

Kromě toho, NuGet udržuje všechny specifikace související na tom, jak jsou strukturovaná balíčky (včetně lokalizace a symboly ladění) a jak se odkazuje (včetně verze rozsahy a předprodejní verze.) NuGet také poskytuje různé rozhraní API pro práci s jeho služby prostřednictvím kódu programu a poskytuje podporu pro vývojáře, kteří vytvářejí rozšíření sady Visual Studio a projekt šablony.Beyond that, NuGet maintains all the specifications related to how packages are structured (including localization and debug symbols) and how they are referenced (including version ranges and pre-release versions.) NuGet also provides various APIs to work with its services programmatically, and provides support for developers who write Visual Studio extensions and project templates.

Za chvíli procházet obsah pro tuto dokumentaci, a uvidíte všechny tyto funkce reprezentované existuje, společně s poznámky k verzi z roku NuGet beginnings.Take a moment to browse the table of contents for this documentation, and you'll see all of these capabilities represented there, along with release notes dating back to NuGet's beginnings.

Komentáře, příspěvky a problémyComments, contributions, and issues

Nakonec velmi mnohem Vítáme komentáře a příspěvky k této dokumentace—právě vyberte zpětné vazby a upravit příkazy horní všechny stránky, nebo navštívit dokumentace úložiště a dokumentace problém seznamu na Githubu.Finally, we very much welcome comments and contributions to this documentation—just select the Feedback and Edit commands on the top of any page, or visit the docs repository and docs issue list on GitHub.

Vítáme příspěvky k NuGet samotné prostřednictvím jeho různých úložišť GitHub; Problémy s NuGet najdete na https://github.com/NuGet/home/issues.We also welcome contributions to NuGet itself through its various GitHub repositories; NuGet issues can be found on https://github.com/NuGet/home/issues.

Užijte si ji prostředí NuGet!Enjoy your NuGet experience!