Pakiety, metapakiety i strukturyPackages, metapackages and frameworks

.NET core to platforma z pakietów NuGet..NET Core is a platform made of NuGet packages. Niektóre produktu środowisk korzyści z szczegółowych definicji pakietów, podczas gdy inne z gruboziarnistych.Some product experiences benefit from fine-grained definition of packages while others from coarse-grained. Aby uwzględnić ten duality, produkt jest rozpowszechniany jako zestaw szczegółowych pakietów i we fragmentach gruboziarnisty o typie pakietu nazywane nieformalnie meta Microsoft.aspnetcore.all.To accommodate this duality, the product is distributed as a fine-grained set of packages and in coarser chunks with a package type informally called a metapackage.

Obsługuje każdego z pakietów .NET Core, są uruchamiane na wiele implementacji .NET, reprezentowane jako struktury.Each of the .NET Core packages support being run on multiple .NET implementations, represented as frameworks. Niektóre z tych platform są tradycyjnych struktur, takie jak net46, reprezentujący programu .NET Framework.Some of those frameworks are traditional frameworks, like net46, representing the .NET Framework. Inny zestaw jest nowych platform, które mogą być uważane za "opartej na pakiecie struktury", które określają nowy model do definiowania struktur.Another set is new frameworks that can be thought of as "package-based frameworks", which establish a new model for defining frameworks. Te struktury opartej na pakiecie są całkowicie sformułowany i definiowane za pomocą pakietów stanowiących silnych relacji między pakietami i struktur.These package-based frameworks are entirely formed and defined as packages, forming a strong relationship between packages and frameworks.

PakietyPackages

.NET core jest dzielony na zestaw pakietów, które zapewniają podstawowych, typów danych wyższego poziomu, typy skład aplikacji i wspólne narzędzia..NET Core is split into a set of packages, which provide primitives, higher-level data types, app composition types and common utilities. Każda z tych pakietów reprezentuje pojedynczy zestaw o takiej samej nazwie.Each of these packages represent a single assembly of the same name. Na przykład System.Runtime zawiera biblioteki System.Runtime.dll.For example, System.Runtime contains System.Runtime.dll.

Istnieją zalety łączenia Definiowanie pakietów w sposób szczegółowe:There are advantages to defining packages in a fine-grained manner:

  • Szczegółowe pakiety mogą być na własnym harmonogramem stosunkowo krótki testowania innych pakietów.Fine-grained packages can ship on their own schedule with relatively limited testing of other packages.
  • Szczegółowych pakietów można obsługiwać różne systemu operacyjnego i procesora CPU.Fine-grained packages can provide differing OS and CPU support.
  • Szczegółowych pakietów może zawierać tylko jedną bibliotekę określonych zależności.Fine-grained packages can have dependencies specific to only one library.
  • Aplikacje są mniejsze, ponieważ pakiety bez odwołań nie należały do dystrybucji aplikacji.Apps are smaller because unreferenced packages don't become part of the app distribution.

Niektóre z tych zalet są używane tylko w pewnych okolicznościach.Some of these benefits are only used in certain circumstances. Na przykład .NET Core pakiety zwykle będą dostarczane na tym samym harmonogramem przy użyciu tej samej pomocy technicznej platformy.For example, NET Core packages will typically ship on the same schedule with the same platform support. W przypadku obsługi, poprawki, może być rozpowszechniany i zainstalowany jako małych pojedynczy pakiet aktualizacji.In the case of servicing, fixes can be distributed and installed as small single package updates. Ze względu na wąskie zakresu zmian weryfikacji i czas, aby udostępnić poprawkę jest ograniczona do potrzebne dla jednej biblioteki.Due to the narrow scope of change, the validation and time to make a fix available is limited to what is needed for a single library.

Oto lista kluczowych pakietów NuGet dla platformy .NET Core:The following is a list of the key NuGet packages for .NET Core:

Typowo, zamiast w tym każdego pakietu, jest łatwiejsze i bardziej niezawodne, aby uwzględnić meta Microsoft.aspnetcore.all.Typically, rather than including each package, it's easier and more robust to include a metapackage. Jednak jeśli potrzebujesz jeden pakiet, możesz dołączyć ją jak w poniższym przykładzie, który odwołuje się System.Runtime pakietu.However, when you need a single package, you can include it as in the following example, which references the System.Runtime package.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="System.Runtime" Version="4.3.0" />
  </ItemGroup>
</Project>

MetapakietyMetapackages

Metapakiety są opisujące zestaw pakietów, które są ze sobą znaczące Konwencja pakietu NuGet.Metapackages are a NuGet package convention for describing a set of packages that are meaningful together. Reprezentują one ten zestaw pakietów, definiując je jako zależności.They represent this set of packages by making them dependencies. Można opcjonalnie ustanowić umożliwiająca ten zestaw pakietów, określając platformę.They can optionally establish a framework for this set of packages by specifying a framework.

Poprzednie wersje narzędzia .NET Core (project.json i csproj narzędzi) domyślnie określona platforma i meta Microsoft.aspnetcore.all.Previous versions of the .NET Core tools (both project.json and csproj-based tools) by default specified both a framework and a metapackage. Obecnie jednak meta Microsoft.aspnetcore.all niejawnie odwołuje się platformę docelową, aby każdy meta Microsoft.aspnetcore.all jest powiązany z platformy docelowej.Currently, however, the metapackage is implicitly referenced by the target framework, so that each metapackage is tied to a target framework. Na przykład netstandard1.6 framework odwołuje się do meta Microsoft.aspnetcore.all wersji 1.6.0 NetStandard.Library.For example, the netstandard1.6 framework references the NetStandard.Library version 1.6.0 metapackage. Podobnie netcoreapp2.1 framework odwołuje się do meta Microsoft.aspnetcore.all pakietów Microsoft.NETCore.App wersja 2.1.0.Similarly, the netcoreapp2.1 framework references the Microsoft.NETCore.App Version 2.1.0 metapackage. Aby uzyskać więcej informacji, zobacz meta Microsoft.aspnetcore.all niejawne odwołanie do pakietu w zestawie SDK programu .NET Core.For more information, see Implicit metapackage package reference in the .NET Core SDK.

Przeznaczanie i niejawne odwołanie do meta Microsoft.aspnetcore.all oznacza obowiązuje dodajesz odwołanie do każdego z jego zależne pakiety jako pojedynczego gestu.Targeting a framework and implicitly referencing a metapackage means that you in effect are adding a reference to each of its dependent packages as a single gesture. Temu wszystkich bibliotek w tych pakietów dostępnych dla funkcji IntelliSense (lub podobne możliwości) i publikowania aplikacji.That makes all of the libraries in those packages available for IntelliSense (or similar experience) and for publishing your app.

Istnieją zalety łączenia metapakiety:There are advantages to using metapackages:

  • Zapewnia wygodne można odwoływać się do szerokiej gamy szczegółowych pakietów.Provides a convenient user experience to reference a large set of fine-grained packages.
  • Definiuje zestaw pakietów (łącznie z określonych wersji), które są testowane i dobrze współpracować.Defines a set of packages (including specific versions) that are tested and work well together.

.NET Standard meta Microsoft.aspnetcore.all jest:The .NET Standard metapackage is:

  • NETStandard.Library — w tym artykule opisano bibliotek, które są częścią ".NET Standard".NETStandard.Library - Describes the libraries that are part of the ".NET Standard". Ma zastosowanie do wszystkich implementacje platformy .NET (na przykład, .NET Framework, .NET Core i platformy Mono), które obsługują .NET Standard.Applies to all .NET implementations (for example, .NET Framework, .NET Core and Mono) that support .NET Standard. Ustanawia framework "netstandard".Establishes the 'netstandard' framework.

Kluczowe metapakiety platformy .NET Core są następujące:The key .NET Core metapackages are:

StrukturyFrameworks

.NET core pakiety obsługi zestawu Platform środowiska uruchomieniowego..NET Core packages each support a set of runtime frameworks. Struktury opisują zestaw interfejsów API dostępnych (i potencjalnie innych parametrów), możesz polegać na gdy miejscem docelowym danej struktury.Frameworks describe an available API set (and potentially other characteristics) that you can rely on when you target a given framework. Są one określonej wersji w miarę dodawania nowych interfejsów API.They are versioned as new APIs are added.

Na przykład System.IO.FileSystem obsługuje następujące platformy:For example, System.IO.FileSystem supports the following frameworks:

  • . NETFramework, Version = 4.6.NETFramework,Version=4.6
  • . NETStandard, Version = 1,3.NETStandard,Version=1.3
  • 6 platformy Xamarin (na przykład xamarinios10)6 Xamarin platforms (for example, xamarinios10)

Jest to przydatne porównać dwa pierwsze z tych środowisk, ponieważ są one przykłady dwa różne sposoby, że struktury są zdefiniowane.It is useful to contrast the first two of these frameworks, since they are examples of the two different ways that frameworks are defined.

.NETFramework,Version=4.6 Framework reprezentuje dostępne interfejsy API w programie .NET Framework 4.6.The .NETFramework,Version=4.6 framework represents the available APIs in the .NET Framework 4.6. Można tworzyć biblioteki skompilowany przy użyciu platformy .NET Framework 4.6 zestawy odwołań, a następnie dokonać dystrybucji tych bibliotek w pakietach NuGet w folderze lib net46.You can produce libraries compiled with the .NET Framework 4.6 reference assemblies and then distribute those libraries in NuGet packages in a net46 lib folder. Będzie używany w przypadku aplikacji, przeznaczone na platformę .NET Framework 4.6 lub które są zgodne z nim.It will be used for apps that target the .NET Framework 4.6 or that are compatible with it. Jest to sposób tradycyjnie korzystano wszystkich środowisk.This is how all frameworks have traditionally worked.

.NETStandard,Version=1.3 Framework to struktura opartej na pakiecie.The .NETStandard,Version=1.3 framework is a package-based framework. Opiera się na pakiety, których platformą docelową platformę, by definiowanie i udostępnianie interfejsów API w ramach.It relies on packages that target the framework to define and expose APIs in terms of the framework.

Na podstawie pakietu strukturyPackage-based frameworks

Istnieje dwukierunkowa relacja platform i pakietów.There is a two-way relationship between frameworks and packages. Pierwsza część jest zdefiniowanie interfejsami API dostępnymi dla danej platformy, na przykład netstandard1.3.The first part is defining the APIs available for a given framework, for example netstandard1.3. Pakiety przeznaczone netstandard1.3 (lub zgodny platform, na przykład netstandard1.0) definiowanie interfejsów API dostępna dla netstandard1.3.Packages that target netstandard1.3 (or compatible frameworks, like netstandard1.0) define the APIs available for netstandard1.3. Które stwierdzenie może wydawać się podobnie jak definicję cykliczną, ale nie jest.That may sound like a circular definition, but it isn't. Bycia "pakiet" na podstawie definicji interfejsu API dla framework pochodzą z pakietów.By virtue of being "package-based", the API definition for the framework comes from packages. Framework sam w sobie nie definiuje żadnych interfejsów API.The framework itself doesn't define any APIs.

Druga część relacji to wybór trwały.The second part of the relationship is asset selection. Pakiety mogą zawierać zasoby dla wielu platform.Packages can contain assets for multiple frameworks. Podane odwołanie do zestawu pakiety i/lub metapakiety, struktura jest potrzebne do określenia, którego należy wybrać, na przykład net46 lub netstandard1.3.Given a reference to a set of packages and/or metapackages, the framework is needed to determine which asset should be selected, for example net46 or netstandard1.3. Należy wybrać prawidłowy zasób.It is important to select the correct asset. Na przykład net46 zasobów nie jest prawdopodobne były zgodne z .NET Framework 4.0 lub platformy .NET Core 1.0.For example, a net46 asset is not likely to be compatible with .NET Framework 4.0 or .NET Core 1.0.

Możesz zobaczyć tę relację na poniższej ilustracji.You can see this relationship in the following image. API jest przeznaczony dla i definiuje framework.The API targets and defines the framework. Framework służy do wybór zasobów.The framework is used for asset selection. Zasobów zapewnia interfejs API.The asset gives you the API.

Struktura oparta na pakiecie kompozycji

Są dwa podstawowe opartej na pakiecie struktury używane z platformą .NET Core:The two primary package-based frameworks used with .NET Core are:

  • netstandard
  • netcoreapp

.NET Standard.NET Standard

.NET Standard (Moniker platformy docelowej: netstandard) framework reprezentuje interfejsy API zdefiniowany przez i wbudowane w górnej części .NET Standard.The .NET Standard (Target Framework Moniker: netstandard) framework represents the APIs defined by and built on top of the .NET Standard. Bibliotek, które są przeznaczone do uruchamiania na wielu modułów wykonawczych powinien dotyczyć ten framework.Libraries that are intended to run on multiple runtimes should target this framework. Będą one obsługiwane, w dowolnym .NET Standard zgodne środowiska uruchomieniowego, takich jak .NET Core, .NET Framework i Mono/Xamarin.They will be supported on any .NET Standard compliant runtime, such as .NET Core, .NET Framework and Mono/Xamarin. Każda z tych środowisk uruchomieniowych obsługuje zestaw .NET Standard wersji, w zależności od tego, w których interfejsy API implementują.Each of these runtimes supports a set of .NET Standard versions, depending on which APIs they implement.

netstandard Framework niejawnie odwołuje się NETStandard.Library meta Microsoft.aspnetcore.all.The netstandard framework implicitly references the NETStandard.Library metapackage. Na przykład następujący plik projektu MSBuild wskazuje, że projekt jest ukierunkowany netstandard1.6, która odwołuje się do NETStandard.Library wersji 1.6 meta Microsoft.aspnetcore.all.For example, the following MSBuild project file indicates that the project targets netstandard1.6, which references the NETStandard.Library version 1.6 metapackage.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>
</Project>

Jednak framework i meta Microsoft.aspnetcore.all odwołania w pliku projektu nie muszą być zgodne, i możesz użyć <NetStandardImplicitPackageVersion> elementu w pliku projektu, aby określić wersję, która jest niższa niż wersja meta Microsoft.aspnetcore.all.However, the framework and metapackage references in the project file do not need to match, and you can use the <NetStandardImplicitPackageVersion> element in your project file to specify a framework version that is lower than the metapackage version. Na przykład następujący plik projektu jest nieprawidłowa.For example, the following project file is valid.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.3</TargetFramework>
    <NetStandardImplicitPackageVersion>1.6.0</NetStandardImplicitPackageVersion>
  </PropertyGroup>
</Project>

Może się to wydawać dziwne do obiektu docelowego netstandard1.3 , ale 1.6.0 wersji NETStandard.Library.It may seem strange to target netstandard1.3 but use the 1.6.0 version of NETStandard.Library. Jest nieprawidłowy przypadek użycia, ponieważ meta Microsoft.aspnetcore.all przechowuje obsługę starszych netstandard wersji.It is a valid use-case, since the metapackage maintains support for older netstandard versions. Może to być przypadek został standaryzowane 1.6.0 wersję meta Microsoft.aspnetcore.all i użyć jej do wszystkich bibliotek, które rozmaite netstandard wersji.It could be the case you've standardized on the 1.6.0 version of the metapackage and use it for all your libraries, which target a variety of netstandard versions. W przypadku tej metody, wystarczy do przywrócenia NETStandard.Library 1.6.0, a nie jego wcześniejszych wersji.With this approach, you only need to restore NETStandard.Library 1.6.0 and not earlier versions.

Odwrotnej nie jest prawidłowym: Określanie wartości docelowej netstandard1.6 z 1.3.0 wersję NETStandard.Library.The reverse would not be valid: targeting netstandard1.6 with the 1.3.0 version of NETStandard.Library. Wyższe framework z niższym meta Microsoft.aspnetcore.all, nie może być przeznaczony ponieważ niższe meta Microsoft.aspnetcore.all wersji nie udostępni wszelkie zasoby dla tej struktury wyższy.You cannot target a higher framework with a lower metapackage, since the lower version metapackage will not expose any assets for that higher framework. Schemat przechowywania wersji dla metapakiety potwierdza, czy metapakiety odpowiadają najwyższa wersja Framework, które opisano w nich.The versioning scheme for metapackages asserts that metapackages match the highest version of the framework they describe. Na podstawie schematu przechowywania wersji, a pierwsza wersja NETStandard.Library jest v1.6.0, biorąc pod uwagę, że zawiera on netstandard1.6 zasoby.By virtue of the versioning scheme, the first version of NETStandard.Library is v1.6.0 given that it contains netstandard1.6 assets. V1.3.0 jest używana w przykładzie powyżej dla symetrii pracę w przykładzie powyżej, ale w rzeczywistości nie istnieje.v1.3.0 is used in the example above, for symmetry with the example above, but does not actually exist.

Aplikacja platformy .NET core.NET Core application

.NET Core (Moniker platformy docelowej: netcoreapp) reprezentuje framework, pakiety i skojarzone interfejsy API, które są dostarczane z dystrybucji platformy .NET Core i modelu aplikacji konsoli, która zapewnia.The .NET Core (Target Framework Moniker: netcoreapp) framework represents the packages and associated APIs that come with the .NET Core distribution and the console application model that it provides. Aplikacje platformy .NET core, należy użyć ta struktura, ze względu na przeznaczonych dla modelu aplikacji konsoli, jak bibliotek, które jest przeznaczony do uruchamiania tylko na platformie .NET Core..NET Core apps must use this framework, due to targeting the console application model, as should libraries that intended to run only on .NET Core. Za pomocą ta struktura ogranicza aplikacji i bibliotek do uruchamiania tylko na platformie .NET Core.Using this framework restricts apps and libraries to running only on .NET Core.

Microsoft.NETCore.App Cele meta Microsoft.aspnetcore.all netcoreapp framework.The Microsoft.NETCore.App metapackage targets the netcoreapp framework. Zapewnia dostęp do bibliotek około 60, około 40 dostarczone przez NETStandard.Library pakietu i ~ 20 więcej w dodatku.It provides access to ~60 libraries, ~40 provided by the NETStandard.Library package and ~20 more in addition. Dodatkowe biblioteki można odwoływać się przeznaczonych netcoreapp lub zgodny struktur, takich jak netstandard, aby uzyskać dostęp do dodatkowych interfejsów API.You can reference additional libraries that target netcoreapp or compatible frameworks, such as netstandard, to get access to additional APIs.

Dodatkowe biblioteki dostarczane przez większość Microsoft.NETCore.App również kierować netstandard biorąc pod uwagę, że ich zależności przez inne netstandard bibliotek.Most of the additional libraries provided by Microsoft.NETCore.App also target netstandard given that their dependencies are satisfied by other netstandard libraries. Oznacza to, że netstandard bibliotek można także odwoływać się te pakiety jako zależności.That means that netstandard libraries can also reference those packages as dependencies.