Pakiety, metapackages i platformPackages, metapackages and frameworks

Oprogramowanie .NET core to platforma z pakietami NuGet..NET Core is a platform made of NuGet packages. Niektóre produktu napotyka korzyści z szczegółowych definicji pakietów, podczas gdy inne z coarse-grained.Some product experiences benefit from fine-grained definition of packages while others from coarse-grained. Aby umożliwić tym duality, produkt jest dystrybuowane zgodnie szczegółową pakietów i następnie opisanego w gruboziarnisty fragmenty o typie pakietu nieformalnego o nazwie "metapackage".To accommodate this duality, the product is distributed as a fine-grained set of packages and then described in coarser chunks with a package type informally called a "metapackage".

Każdego z pakietów platformy .NET Core obsługuje uruchomione 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 środowisk tradycyjnych struktur, są tak samo, jak net46, reprezentujący programu .NET Framework.Some of those frameworks are traditional frameworks, like net46, representing the .NET Framework. Inny zestaw jest nowych struktur, które można traktować jako "na podstawie pakietu struktury", które określają nowy model do definiowania struktury.Another set is new frameworks that can be thought of as "package-based frameworks", which establish a new model for defining frameworks. Te struktury na podstawie pakietu są całkowicie sformułowany i zdefiniowane jako pakietów tworzące umacnianie relacji między pakietami i platform.These package-based frameworks are entirely formed and defined as packages, forming a strong relationship between packages and frameworks.

PakietyPackages

Oprogramowanie .NET core jest podzielony na zestaw pakietów, zapewniających podstawowych, wyższego poziomu typy danych, typy kompozycji aplikacji i typowych narzędzi..NET Core is split into a set of packages, which provide primitives, higher-level data types, app composition types and common utilities. Każdy z tych pakietów reprezentują jednym zestawie 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ą pewne zalety Definiowanie pakietów w sposób szczegółowych:There are advantages to defining packages in a fine-grained manner:

  • Szczegółowe pakiety mogą być w swoim własnym harmonogramem z ograniczonym testowania z innymi pakietami.Fine-grained packages can ship on their own schedule with relatively limited testing of other packages.
  • Szczegółowe pakietów zapewniają różne obsługi systemu operacyjnego i procesora CPU.Fine-grained packages can provide differing OS and CPU support.
  • Zależności określonych może zawierać tylko jedną bibliotekę szczegółowych pakietów.Fine-grained packages can have dependencies specific to only one library.
  • Aplikacje są mniejsze, ponieważ pakiety bez odwołań nie staną się częścią 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 pakietami podstawowymi NET zwykle wyśle na ten sam harmonogram z obsługą tej samej platformy.For example, NET Core packages will typically ship on the same schedule with the same platform support. W przypadku obsługi poprawek można dystrybuować 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ąsko zdefiniowany zakresu zmian sprawdzanie poprawności i czasu, aby udostępnić poprawka jest ograniczona do potrzebna 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.

Poniżej przedstawiono listę kluczy pakietów NuGet dla platformy .NET Core:The following is a list of the key NuGet packages for .NET Core:

Zazwyczaj zamiast tym pakiety w projektach na podstawie przez pakiet, znacznie łatwiej jest obejmują metapackage, czyli zestawowi pakietów, które są często używane razem.Typically, rather than including packages in your projects on a package-by-package basis, it is far easier to include a metapackage, which is a set of packages that are often used together. (Aby uzyskać więcej informacji o metapackages, zobacz sekcję poniżej). Jednak gdy będziesz potrzebować pojedynczy pakiet, można dołączyć go tak jak w przykładzie poniżej odwołującego System.Runtime pakietu.(For more information on metapackages, see the following section.) However, when you need a single package, you can include it as in the example below, 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>

MetapackagesMetapackages

Metapackages są Konwencja pakietu NuGet opisujące zestaw pakietów, które są ze sobą łatwy do rozpoznania.Metapackages are a NuGet package convention for describing a set of packages that are meaningful together. Reprezentują ten zestaw pakietów przez umieszczenie ich zależności.They represent this set of packages by making them dependencies. Można opcjonalnie ustanowić framework dla tego zestawu pakietów przez określenie struktury.They can optionally establish a framework for this set of packages by specifying a framework.

Poprzednie wersje narzędzi platformy .NET Core (pliku project.json i narzędzia oparte na csproj) domyślnie określony zarówno struktury, jak i metapackage.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 metapackage niejawnie odwołuje się platformy docelowej, dzięki czemu każdy metapackage jest zwią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 metapackage wersji 1.6.0 NetStandard.Library.For example, the netstandard1.6 framework references the NetStandard.Library version 1.6.0 metapackage. Podobnie netcoreapp1.1 framework odwołuje się do metapackage Microsoft.NETCore.App wersji 1.1.0.Similarly, the netcoreapp1.1 framework references the Microsoft.NETCore.App Version 1.1.0 metapackage. Aby uzyskać więcej informacji, zobacz metapackage niejawne odwołanie do pakietu w .NET Core SDK.For more information, see Implicit metapackage package reference in the .NET Core SDK.

Przeznaczanie dla platformy i niejawne odwołanie do metapackage oznacza, że skutkuje dodajesz odwołanie do każdego z jego pakietów zależnych jako pojedynczy 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. Dzięki temu wszystkich bibliotek w tych pakietach dostępne dla 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.

Zalety korzystania metapackages są:There are advantages to using metapackages:

  • Zapewnia obsługę wygodny do odwołania duży zbiór szczegółowych pakietów.Provides a convenient user experience to reference a large set of fine-grained packages.
  • Definiuje zestaw pakietów (w tym określonych wersji), które są przetestowane i siebie.Defines a set of packages (including specific versions) that are tested and work well together.

.NET Standard metapackage 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". Dotyczy wszystkich implementacji .NET (na przykład, .NET Framework, .NET Core i 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 "krótkich nazw netstandard".Establishes the 'netstandard' framework.

Klucza metapackages .NET Core są:The key .NET Core metapackages are:

StrukturyFrameworks

Oprogramowanie .NET core pakietów obsługuje zestaw platform środowiska uruchomieniowego..NET Core packages each support a set of runtime frameworks. Struktury opisano dostępne zestaw interfejsów API (i potencjalnie innych parametrów) czy użytkownik może wykorzystywać podczas target framework danego.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 struktury:For example, System.IO.FileSystem supports the following frameworks:

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

Warto natomiast dwa pierwsze z tych struktur, ponieważ są one przykłady dwa różne sposoby zdefiniowania struktury.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ępnych interfejsów API w .NET Framework 4.6.The .NETFramework,Version=4.6 framework represents the available APIs in the .NET Framework 4.6. Możesz utworzyć różne bibliotek skompilowana przy użyciu programu .NET Framework 4.6 zestawów odwołań, a następnie rozpowszechnić te biblioteki w pakietach NuGet w folderze net46 lib.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 dla aplikacji, których docelowe .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 pracowali wszystkich platform.This is how all frameworks have traditionally worked.

.NETStandard,Version=1.3 Framework to struktura na podstawie pakietu.The .NETStandard,Version=1.3 framework is a package-based framework. Jest zależne od pakietów przeznaczonych dla framework do definiowania i uwidacznia 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 relacja dwukierunkowego między platform i pakietów.There is a two-way relationship between frameworks and packages. Pierwsza część jest zdefiniowanie z 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. Pakietów kierowanych netstandard1.3 (lub zgodne platform, takich jak netstandard1.0) zdefiniowanie z interfejsami API dostępnymi dla netstandard1.3.Packages that target netstandard1.3 (or compatible frameworks, like netstandard1.0) define the APIs available for netstandard1.3. Który może dźwiękowej jak definicję cykliczną, ale nie jest.That may sound like a circular definition, but it isn't. Na podstawie stanowi "na podstawie pakietu", definicję interfejsu API w ramach pochodzi z pakietów.By virtue of being "package-based", the API definition for the framework comes from packages. Platformę sam 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ć zasobów dla wielu struktur.Packages can contain assets for multiple frameworks. Podane odwołanie do zestawu pakiety i/lub metapackages, platformę są potrzebne, aby określić, którego zasobu 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ć poprawny zasobów.It is important to select the correct asset. Na przykład net46 zasobów prawdopodobnie nie był zgodny z programu .NET Framework 4.0 lub .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żna wyświetlić tę relację na poniższej ilustracji.You can see this relationship in the following image. Interfejsu API elementów docelowych i definiuje framework.The API targets and defines the framework. Framework służy do wybór trwały.The framework is used for asset selection. Zasobów umożliwia interfejsu API.The asset gives you the API.

Struktura oparta na pakiecie kompozycji

Są dwa podstawowe na podstawie pakietu 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 (target framework moniker: netstandard) framework reprezentuje interfejsów API zdefiniowany przez i oparty na .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 wiele środowisk uruchomieniowych powinna wskazywać platforma.Libraries that are intended to run on multiple runtimes should target this framework. Będą one obsługiwane na standardowe .NET runtime zgodne, 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żdy z tych środowisk uruchomieniowych obsługuje zestaw .NET Standard wersji, w zależności od tego, które interfejsy API wdrażania.Each of these runtimes supports a set of .NET Standard versions, depending on which APIs they implement.

netstandard Framework niejawnie odwołuje się do NETStandard.Library metapackage.The netstandard framework implicitly references the NETStandard.Library metapackage. Na przykład następujący plik projektu programu MSBuild wskazuje, że elementy docelowe projektu netstandard1.6, które odwołania NETStandard.Library wersji 1.6 metapackage.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 metapackage odwołania w pliku projektu musi być zgodny i można użyć <NetStandardImplicitPackageVersion> elementu w pliku projektu, aby określić framework w wersji, która jest starsza niż wersja metapackage.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 wydawać się dziwne do 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ż metapackage zapewnia obsługę starszych netstandard wersji.It is a valid use-case, since the metapackage maintains support for older netstandard versions. Może to być case już standaryzowane do 1.6.0 wersji metapackage i użyć jej do wszystkich bibliotek, które są docelowo różnych 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. Z tej metody, wystarczy przywrócić NETStandard.Library 1.6.0 i nie starszych wersji.With this approach, you only need to restore NETStandard.Library 1.6.0 and not earlier versions.

Sytuacja odwrotna nie jest prawidłowym: przeznaczonych dla netstandard1.6 z 1.3.0 wersji NETStandard.Library.The reverse would not be valid: targeting netstandard1.6 with the 1.3.0 version of NETStandard.Library. Wyższy framework z niższym metapackage, nie może wskazać, ponieważ niższe metapackage wersji nie powoduje to udostępnienie wszystkie 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. Przechowywanie wersji systemu metapackages potwierdza, czy metapackages pasuje do najwyższej wersji framework, które opisano w nich.The versioning scheme for metapackages asserts that metapackages match the highest version of the framework they describe. Z systemu kontroli wersji, pierwszej wersji 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żywany w powyższym przykładzie dla symetrycznego z powyższym przykładzie, ale faktycznie nie istnieje.v1.3.0 is used in the example above, for symmetry with the example above, but does not actually exist.

Aplikacja .NET core.NET Core application

Aplikacja .NET Core (TFM: netcoreapp) reprezentuje framework pakietów i skojarzone interfejsy API, które są dostarczane z dystrybucji .NET Core i model aplikacji konsoli, która zapewnia.The .NET Core Application (TFM: netcoreapp) framework represents the packages and associated APIs that come with the .NET Core distribution and the console application model that it provides. Aplikacje .NET core muszą używać tej platformy, z powodu przeznaczonych dla modelu aplikacji konsoli, jak biblioteki, w których jest przeznaczony do uruchamiania tylko na platformy .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. Przy użyciu tej platformy, ogranicza aplikacji i bibliotek uruchomiona tylko na platformy .NET Core.Using this framework restricts apps and libraries to running only on .NET Core.

Microsoft.NETCore.App Celów metapackage netcoreapp framework.The Microsoft.NETCore.App metapackage targets the netcoreapp framework. Zapewnia dostęp do biblioteki ~ 60 ~ 40 dostarczonych 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. Można odwoływać się do dodatkowych bibliotek przeznaczonych netcoreapp lub zgodne 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.

Większość dodatkowe biblioteki udostępnione przez Microsoft.NETCore.App również kierować netstandard biorąc pod uwagę, że ich zależności w innych netstandard biblioteki.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 biblioteki można także odwoływać tych pakietów jako zależności.That means that netstandard libraries can also reference those packages as dependencies.