Środowisko uruchomieniowe pakietu magazynuRuntime package store

Począwszy od programu .NET Core 2.0 jest możliwe pakietu i wdrażanie aplikacji pod kątem znanych zestawu pakietów, które istnieją w środowisku docelowym.Starting with .NET Core 2.0, it's possible to package and deploy apps against a known set of packages that exist in the target environment. Zalety są szybsze wdrożeń, niższe użycie miejsca na dysku i uruchamiania lepszą wydajność w niektórych przypadkach.The benefits are faster deployments, lower disk space use, and improved startup performance in some cases.

Ta funkcja jest zaimplementowany jako Magazyn pakietu środowiska uruchomieniowego, czyli katalogu na dysku przechowywania pakietów (zazwyczaj na /usr/local/share/dotnet/store na macOS/Linux i C: / Program plików/dotnet/store w systemie Windows).This feature is implemented as a runtime package store, which is a directory on disk where packages are stored (typically at /usr/local/share/dotnet/store on macOS/Linux and C:/Program Files/dotnet/store on Windows). W tym katalogu są podkatalogi dla architektury i platform docelowych.Under this directory, there are subdirectories for architectures and target frameworks. Układ pliku jest podobny sposób, który NuGet zasoby zostały przedstawione na dysku:The file layout is similar to the way that NuGet assets are laid out on disk:

\dotnet\dotnet
  \store  \store
    \x64    \x64
      \netcoreapp2.0      \netcoreapp2.0
        \Microsoft.applicationinsights        \microsoft.applicationinsights
        \Microsoft.aspnetcore        \microsoft.aspnetcore
        ...        ...
    \x86    \x86
      \netcoreapp2.0      \netcoreapp2.0
        \Microsoft.applicationinsights        \microsoft.applicationinsights
        \Microsoft.aspnetcore        \microsoft.aspnetcore
        ...        ...

A manifest docelowej plik zawiera listę pakietów w magazynie pakietów środowiska wykonawczego.A target manifest file lists the packages in the runtime package store. Umożliwiają deweloperom tego manifestu podczas publikowania aplikacji.Developers can target this manifest when publishing their app. Manifest docelowy jest zwykle zapewniany przez właściciela środowiska produkcyjnego docelowych.The target manifest is typically provided by the owner of the targeted production environment.

Przygotowywanie środowiska uruchomieniowegoPreparing a runtime environment

Administrator środowiska uruchomieniowego można zoptymalizować aplikacje dla wdrożeń szybsze i dolnym użycie miejsca na dysku według budynków magazynie pakietów środowiska uruchomieniowego i odpowiednie manifest docelowej.The administrator of a runtime environment can optimize apps for faster deployments and lower disk space use by building a runtime package store and the corresponding target manifest.

Pierwszym krokiem jest utworzenie manifestu sklepu pakietu który zawiera listę pakietów, które tworzą magazyn pakietu środowiska wykonawczego.The first step is to create a package store manifest that lists the packages that compose the runtime package store. Ten format jest zgodny z formatem pliku projektu (csproj).This file format is compatible with the project file format (csproj).

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <PackageReference Include="<NUGET_PACKAGE>" Version="<VERSION>" />
    <!-- Include additional packages here -->
  </ItemGroup>
</Project>

PrzykładExample

Następujące manifest przykład w magazynie pakietów (packages.csproj) służy do dodawania Newtonsoft.Json i Moq do magazynu pakiet środowiska uruchomieniowego:The following example package store manifest (packages.csproj) is used to add Newtonsoft.Json and Moq to a runtime package store:

<Project Sdk="Microsoft.NET.Sdk">
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="Moq" Version="4.7.63" />
  </ItemGroup>
</Project>

Udostępnić Magazyn pakietu środowiska uruchomieniowego, wykonując dotnet store z manifestu sklepu pakietu, środowisko uruchomieniowe i framework:Provision the runtime package store by executing dotnet store with the package store manifest, runtime, and framework:

dotnet store --manifest <PATH_TO_MANIFEST_FILE> --runtime <RUNTIME_IDENTIFIER> --framework <FRAMEWORK>

PrzykładExample

dotnet store --manifest packages.csproj --runtime win10-x64 --framework netcoreapp2.0 --framework-version 2.0.0

Wiele ścieżek manifestu sklepu pakietu docelowych można przekazać do pojedynczego dotnet store polecenia powtarzając opcja i ścieżki w poleceniu.You can pass multiple target package store manifest paths to a single dotnet store command by repeating the option and path in the command.

Domyślnie dane wyjściowe polecenia jest magazynem pakietu w obszarze .dotnet/store podkatalogu profilu użytkownika.By default, the output of the command is a package store under the .dotnet/store subdirectory of the user's profile. Możesz określić inną lokalizację przy użyciu --output <OUTPUT_DIRECTORY> opcji.You can specify a different location using the --output <OUTPUT_DIRECTORY> option. Katalog główny magazynu zawiera manifest docelowej artifact.xml pliku.The root directory of the store contains a target manifest artifact.xml file. Ten plik można udostępnić do pobrania i jest używany przez autorów aplikacji, które ma być docelowa tego magazynu podczas publikowania.This file can be made available for download and be used by app authors who want to target this store when publishing.

PrzykładExample

Następujące artifact.xml jest generowany po uruchomieniu w poprzednim przykładzie.The following artifact.xml file is produced after running the previous example. Należy pamiętać, że Castle.Core zależą od elementu Moq, tak, aby go zostało automatycznie uwzględnione w artifacts.xml pliku manifestu.Note that Castle.Core is a dependency of Moq, so it's included automatically and appears in the artifacts.xml manifest file.

<StoreArtifacts>
  <Package Id="Newtonsoft.Json" Version="10.0.3" />
  <Package Id="Castle.Core" Version="4.1.0" />
  <Package Id="Moq" Version="4.7.63" />
</StoreArtifacts>

Publikowanie aplikacji dla manifest docelowegoPublishing an app against a target manifest

Jeśli masz manifestu pliku na dysku docelowym, określ ścieżkę do pliku podczas publikowania aplikacji za pomocą dotnet publish polecenia:If you have a target manifest file on disk, you specify the path to the file when publishing your app with the dotnet publish command:

dotnet publish --manifest <PATH_TO_MANIFEST_FILE>

PrzykładExample

dotnet publish --manifest manifest.xml

Wynikowa opublikowanej aplikacji można wdrożyć na środowisku pakietów opisanego w manifeście docelowej.You deploy the resulting published app to an environment that has the packages described in the target manifest. Niepowodzenie w tym przypadku powoduje niepowodzenie uruchomienia aplikacji.Failing to do so results in the app failing to start.

Określ wiele manifestów docelowego podczas publikowania aplikacji przez powtarzające się opcja i ścieżki (na przykład --manifest manifest1.xml --manifest manifest2.xml).Specify multiple target manifests when publishing an app by repeating the option and path (for example, --manifest manifest1.xml --manifest manifest2.xml). Po wykonaniu tej aplikacji jest usuwane Unii pakietów określona w plikach manifestu docelowy dostarczony do polecenia.When you do so, the app is trimmed for the union of packages specified in the target manifest files provided to the command.

Określanie docelowej manifesty w pliku projektuSpecifying target manifests in the project file

Zamiast określania docelowych manifesty z dotnet publish ma je określić w pliku projektu jako Rozdzielana średnikami lista ścieżek w ramach polecenie <TargetManifestFiles > tagu.An alternative to specifying target manifests with the dotnet publish command is to specify them in the project file as a semicolon-separated list of paths under a <TargetManifestFiles> tag.

<PropertyGroup>
  <TargetManifestFiles>manifest1.xml;manifest2.xml</TargetManifestFiles>
</PropertyGroup>

Określ docelowy manifesty w pliku projektu tylko wtedy, gdy dobrze znane, takich jak .NET Core projektów środowiska docelowego dla aplikacji.Specify the target manifests in the project file only when the target environment for the app is well-known, such as for .NET Core projects. Nie jest to w przypadku projektów open source.This isn't the case for open-source projects. Użytkownicy projekt typu open source zwykle go wdrożyć w różnych środowiskach.The users of an open-source project typically deploy it to different production environments. Tych środowisk produkcyjnych zazwyczaj mają różne zestawy wstępnie zainstalowane pakiety.These production environments generally have different sets of packages pre-installed. Nie można wprowadzić założenia dotyczące manifestu docelowego w takich środowiskach, należy użyć --manifest opcji dotnet publish .You can't make assumptions about the target manifest in such environments, so you should use the --manifest option of dotnet publish.

Niejawne magazynu platformy ASP.NET CoreASP.NET Core implicit store

Funkcja Magazyn pakietu środowiska uruchomieniowego służy niejawnie przez aplikację ASP.NET Core gdy aplikacja jest wdrożona jako wdrożenia framework zależne (stacje) aplikacji.The runtime package store feature is used implicitly by an ASP.NET Core app when the app is deployed as a framework-dependent deployment (FDD) app. Obiekty docelowe w Microsoft.NET.Sdk.Web obejmują manifestów odwołujące się do niejawnego magazynie pakietów w systemie docelowym.The targets in Microsoft.NET.Sdk.Web include manifests referencing the implicit package store on the target system. Ponadto dowolną aplikację Dyskietki, która jest zależna od Microsoft.AspNetCore.All pakietu wyniki w opublikowanej aplikacji, który zawiera tylko aplikacji i jej zasoby i nie pakiety wymienione w Microsoft.AspNetCore.All metapackage.Additionally, any FDD app that depends on the Microsoft.AspNetCore.All package results in a published app that contains only the app and its assets and not the packages listed in the Microsoft.AspNetCore.All metapackage. Zakłada się, że pakiety są obecne w systemie docelowym.It's assumed that those packages are present on the target system.

Magazyn pakietu środowiska uruchomieniowego jest zainstalowana na hoście, po zainstalowaniu programu .NET Core SDK.The runtime package store is installed on the host when the .NET Core SDK is installed. Inne instalatorów może udostępnić magazyn środowisko uruchomieniowe pakietu, w tym Zip/tarball instalacji programu .NET Core SDK apt-get, Red Hat Yum, .NET Core systemu Windows serwer obsługujący pakietu i instalacje magazynie pakietów ręcznego środowiska wykonawczego.Other installers may provide the runtime package store, including Zip/tarball installations of the .NET Core SDK, apt-get, Red Hat Yum, the .NET Core Windows Server Hosting bundle, and manual runtime package store installations.

W przypadku wdrażania wdrożenia framework zależne (stacje) aplikacji, upewnij się, że środowisko docelowe ma zainstalowany zestaw .NET Core SDK.When deploying a framework-dependent deployment (FDD) app, make sure that the target environment has the .NET Core SDK installed. Jeśli aplikacja jest wdrażana w środowisku, który nie zawiera platformy ASP.NET Core, można zrezygnować z magazynu niejawne, określając <PublishWithAspNetCoreTargetManifest > ustawioną false w pliku projektu, jak w programie Poniższy przykład:If the app is deployed to an environment that doesn't include ASP.NET Core, you can opt out of the implicit store by specifying <PublishWithAspNetCoreTargetManifest> set to false in the project file as in the following example:

<PropertyGroup>
  <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
</PropertyGroup>

Uwaga

Dla niezależne wdrożenia (SCD) aplikacji, zakłada się, że w systemie docelowym musi nie zawiera wymaganych pakietów manifestu.For self-contained deployment (SCD) apps, it's assumed that the target system doesn't necessarily contain the required manifest packages. W związku z tym <PublishWithAspNetCoreTargetManifest > nie można ustawić true SCD aplikacji.Therefore, <PublishWithAspNetCoreTargetManifest> cannot be set to true for an SCD app.

W przypadku wdrożenia aplikacji z zależnością manifestu, który istnieje we wdrożeniu (znajduje się w zestawie bin folderu), magazynie pakietów środowiska uruchomieniowego nie jest używana na hoście dla tego zestawu.If you deploy an application with a manifest dependency that's present in the deployment (the assembly is present in the bin folder), the runtime package store isn't used on the host for that assembly. Bin folderu zestaw jest używany niezależnie od jej obecności w magazynie pakietów środowiska uruchomieniowego na hoście.The bin folder assembly is used regardless of its presence in the runtime package store on the host.

Wersja zależności wskazane w manifeście musi być zgodna wersja zależności w magazynie pakietów środowiska wykonawczego.The version of the dependency indicated in the manifest must match the version of the dependency in the runtime package store. Jeśli masz niezgodność wersji między zależności w manifeście docelowych i wersji, który istnieje w magazynie pakietów środowiska uruchomieniowego i aplikacji nie zawiera wymaganej wersji pakietu w jego wdrażania, aplikacja nie powiedzie się.If you have a version mismatch between the dependency in the target manifest and the version that exists in the runtime package store and the app doesn't include the required version of the package in its deployment, the app fails to start. Wyjątek zawiera nazwę manifestu docelowych, wymagane zestawu magazynie pakietów środowiska wykonawczego, która pomaga w rozwiązywaniu problemów niezgodność.The exception includes the name of the target manifest that called for the runtime package store assembly, which helps you troubleshoot the mismatch.

Gdy wdrożenie jest przycięty przy publikowaniu, określonych wersji manifestu pakietów, należy wskazać zostały wstrzymane z publikowanych danych wyjściowych.When the deployment is trimmed on publish, only the specific versions of the manifest packages you indicate are withheld from the published output. Pakiety w wersji wskazane musi być obecny na hoście aplikacji do uruchomienia.The packages at the versions indicated must be present on the host for the app to start.

Zobacz takżeSee also

DotNet-publikowaniadotnet-publish
Magazyn DotNetdotnet-store