Magazyn pakietu środowiska uruchomieniowegoRuntime package store

Począwszy od programu .NET Core 2.0, istnieje możliwość pakować i wdrażać aplikacje przed znanych zestaw 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. Korzyści są szybsze wdrożenia, niższe użycie miejsca na dysku i wydajności uruchamiania ulepszone w niektórych przypadkach.The benefits are faster deployments, lower disk space use, and improved startup performance in some cases.

Ta funkcja jest implementowany jako Magazyn pakietu środowiska uruchomieniowego, który jest katalogiem na dysku, na którym przechowywane są pakiety (zwykle znajduje się w /usr/local/share/dotnet/store w systemie macOS/Linux i C: / Program plików/dotnet/store na 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 istnieją podkatalogów dla architektury i ustalać platformy docelowe.Under this directory, there are subdirectories for architectures and target frameworks. Układ pliku jest podobny sposób, który NuGet zasoby są ułożone w na dysku:The file layout is similar to the way that NuGet assets are laid out on disk:

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

A target manifestem plik listy pakietów w Magazyn pakietu środowiska uruchomieniowego.A target manifest file lists the packages in the runtime package store. Deweloperzy mogą kierować tego manifestu, podczas publikowania aplikacji.Developers can target this manifest when publishing their app. Manifest docelowy jest zwykle zapewniany przez właściciela w środowisku produkcyjnym 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ń szybciej i niższym użycie miejsca na dysku, tworząc Magazyn pakietu środowiska uruchomieniowego i odpowiedniego manifestu docelowego.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 , zawiera listę pakietów, które tworzą magazyn pakietu środowiska uruchomieniowego.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

Poniższy przykład pakietów manifestu Sklepu (packages.csproj) służy do dodawania Newtonsoft.Json i Moq do Magazyn pakietu ś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>

Aprowizuj Magazyn pakietu środowiska uruchomieniowego, wykonując dotnet store z manifestu Magazyn pakietu środowiska uruchomieniowego 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 pakietu magazynu docelowego 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 Magazyn 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ę, w którym używana jest --output <OUTPUT_DIRECTORY> opcji.You can specify a different location using the --output <OUTPUT_DIRECTORY> option. Katalog główny magazyn zawiera manifest docelowej artifact.xml pliku.The root directory of the store contains a target manifest artifact.xml file. Ten plik może być udostępniane do pobrania i używane przez autorów aplikacji, którzy ma pod kątem 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 po uruchomieniu w poprzednim przykładzie jest tworzony plik.The following artifact.xml file is produced after running the previous example. Należy pamiętać, że Castle.Core zależą od elementu Moq, więc jest automatycznie włączone i pojawia się 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 względem manifest docelowejPublishing an app against a target manifest

Jeśli masz plik manifestu docelowego na dysku, 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

Możesz wdrożyć wynikowy opublikowanej aplikacji w środowisku, który zawiera pakiety, opisane w manifeście docelowego.You deploy the resulting published app to an environment that has the packages described in the target manifest. Powoduje niepowodzenie w tym aplikacji, nie można uruchomić.Failing to do so results in the app failing to start.

Określ wiele manifesty docelowego podczas publikowania aplikacji, powtarzając opcji 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). Jeśli tak zrobisz, aplikacja są spacje dla Unii pakiety określone w plikach manifestu docelowej dostarczane 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 manifesty docelowy w pliku projektuSpecifying target manifests in the project file

Zamiast określania docelowej manifesty za pomocą dotnet publish ma je określić w pliku projektu jako Rozdzielana średnikami lista ścieżek w obszarze 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>

Manifesty docelowego należy określić w pliku projektu tylko wtedy, gdy środowisko docelowe dla aplikacji jest dobrze znanych, takich jak dla projektów .NET Core.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 typu open source.This isn't the case for open-source projects. Użytkownicy projektu open-source zazwyczaj wdrożyć ją na środowisko produkcyjne różne.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żesz wprowadzać założeń dotyczących manifestu docelowego w takich środowiskach, więc zaleca się użycie --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

Magazyn niejawne platformy ASP.NET Core dotyczy tylko programu ASP.NET Core 2.0.The ASP.NET Core implicit store applies only to ASP.NET Core 2.0. Zdecydowanie zalecamy aplikacje używają platformy ASP.NET Core 2.1 lub nowszą wersją, która obsługuje nie Użycie niejawnej magazynu.We strongly recommend applications use ASP.NET Core 2.1 and later, which does not use the implicit store. I późniejszego użycia udostępnionej platformy ASP.NET Core 2.1.ASP.NET Core 2.1 and later use the shared framework.

Funkcja Magazyn pakietu środowiska uruchomieniowego jest używany niejawnie przez aplikację ASP.NET Core gdy aplikacja jest wdrożona jako zależny od struktury wdrożenia (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ą manifesty odwołujące się do niejawnego Magazyn pakietu w systemie docelowym.The targets in Microsoft.NET.Sdk.Web include manifests referencing the implicit package store on the target system. Ponadto żadnej aplikacji Dyskietki, która jest zależna od Microsoft.AspNetCore.All pakietu wyniki w opublikowanej aplikacji, która zawiera tylko aplikacji i jej zasoby i nie pakiety, które zostały wymienione w Microsoft.AspNetCore.All meta Microsoft.aspnetcore.all.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 te pakiety są obecne w systemie docelowym.It's assumed that those packages are present on the target system.

Magazyn pakietu środowiska uruchomieniowego jest zainstalowany na hoście, gdy jest zainstalowany zestaw .NET Core SDK.The runtime package store is installed on the host when the .NET Core SDK is installed. Inne pliki instalacyjne może udostępnić Magazyn pakietu środowiska uruchomieniowego, w tym pliku Zip/tar instalacji programu .NET Core SDK apt-get, Red Hat Yum, pakiet .NET Core systemu Windows serwer obsługujący i instalacje Magazyn pakietu środowiska uruchomieniowego ręczne.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 zależny od struktury wdrożenia (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 programu ASP.NET Core, można zrezygnować z niejawne magazynu, określając <PublishWithAspNetCoreTargetManifest > równa false w pliku projektu, podobnie jak w 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

Aby uzyskać niezależna 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 za pomocą zależności manifestu, który znajduje się we wdrożeniu (zestawu znajduje się w bin folderu), Magazyn pakietu środowiska uruchomieniowego nie jest używany 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 jego obecność w Magazyn pakietu ś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 odpowiadać wersji zależności w Magazyn pakietu środowiska uruchomieniowego.The version of the dependency indicated in the manifest must match the version of the dependency in the runtime package store. Jeśli istnieje niezgodność wersji między zależności w manifeście docelowej i wersję, która znajduje się w Magazyn pakietu środowiska uruchomieniowego i aplikacja nie obejmuje wymagana wersja pakietu w jej wdrożenia, jej uruchomienie 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ę manifest docelowego, który wywołał dla zestawu Magazyn pakietu środowiska uruchomieniowego, 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.

Po wdrożeniu spacje przy publikowaniu, tylko określone wersje manifestu pakietów, możesz wskazać zostały wstrzymane z opublikowanych 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 wersjach wskazane musi być obecny na hoście dla aplikacji, aby rozpocząć.The packages at the versions indicated must be present on the host for the app to start.

Zobacz takżeSee also