Úložiště balíčků modulu runtime

Od verze .NET Core 2.0 je možné zabalit a nasadit aplikace do známé sady balíčků, které existují v cílovém prostředí. Výhody jsou rychlejší nasazení, nižší využití místa na disku a v některých případech vyšší výkon při spuštění.

Tato funkce se implementuje jako úložiště balíčků za běhu, což je adresář na disku, na kterém jsou uložené balíčky (obvykle ve složce /usr/local/share/dotnet/store v systému macOS/Linux a C:/Program Files/dotnet/store ve Windows). V tomto adresáři jsou podadresáře pro architektury a cílové architektury. Rozložení souboru je podobné způsobu, jakým jsou prostředky NuGet rozloženy na disku:

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

Cílový soubor manifestu obsahuje seznam balíčků v úložišti balíčků modulu runtime. Vývojáři můžou tento manifest cílit při publikování aplikace. Cílový manifest obvykle poskytuje vlastník cílového produkčního prostředí.

Příprava běhového prostředí

Správce prostředí runtime může optimalizovat aplikace pro rychlejší nasazení a nižší využití místa na disku vytvořením úložiště balíčků modulu runtime a odpovídajícího cílového manifestu.

Prvním krokem je vytvoření manifestu úložiště balíčků se seznamem balíčků, které tvoří úložiště balíčků runtime. Tento formát souboru je kompatibilní s formátem souboru projektu (csproj).

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

Příklad

Následující příklad manifestu úložiště balíčků (packages.csproj) se používá k přidání Newtonsoft.Json a Moq do úložiště balíčků runtime:

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

Zřiďte úložiště balíčků runtime spuštěním dotnet store manifestu úložiště balíčků, modulu runtime a architektury:

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

Příklad

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

Cesty manifestu úložiště cílových balíčků můžete předat jednomu dotnet store příkazu opakováním možnosti a cesty v příkazu.

Ve výchozím nastavení je výstupem příkazu úložiště balíčků v podadresáři .dotnet/store profilu uživatele. Pomocí této možnosti můžete zadat jiné umístění --output <OUTPUT_DIRECTORY> . Kořenový adresář úložiště obsahuje cílový soubor manifestu artifact.xml . Tento soubor lze zpřístupnit ke stažení a používat autoři aplikací, kteří chtějí při publikování cílit na tento obchod.

Příklad

Následující artifact.xml soubor se vytvoří po spuštění předchozího příkladu. Všimněte si, že Castle.Core je závislost Moq, takže je zahrnuta automaticky a zobrazí se v souboru manifestu artifacts.xml.

<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>

Publikování aplikace proti cílovému manifestu

Pokud máte na disku cílový soubor manifestu, zadáte cestu k souboru při publikování aplikace pomocí dotnet publish příkazu:

dotnet publish --manifest <PATH_TO_MANIFEST_FILE>

Příklad

dotnet publish --manifest manifest.xml

Výslednou publikovanou aplikaci nasadíte do prostředí, které obsahuje balíčky popsané v cílovém manifestu. Pokud to neuděláte, znamená to, že se aplikace nespustí.

Při publikování aplikace zadejte více cílových manifestů opakováním možnosti a cesty (například --manifest manifest1.xml --manifest manifest2.xml). Když to uděláte, aplikace se oříznou pro sjednocení balíčků zadaných v cílových souborech manifestu zadaných příkazem.

Pokud nasadíte aplikaci se závislostí manifestu, která se nachází v nasazení (sestavení se nachází ve složce bin ), úložiště balíčků modulu runtime se na hostiteli pro toto sestavení nepoužívá . Sestavení složky přihrádky se používá bez ohledu na jeho přítomnost v úložišti balíčků modulu runtime na hostiteli.

Verze závislosti uvedené v manifestu musí odpovídat verzi závislosti v úložišti balíčků modulu runtime. Pokud máte neshodu verzí mezi závislostí v cílovém manifestu a verzí, která existuje v úložišti balíčků modulu runtime a aplikace do nasazení neobsahuje požadovanou verzi balíčku, aplikace se nespustí. Výjimka obsahuje název cílového manifestu, který volal sestavení úložiště balíčků modulu runtime, což vám pomůže vyřešit neshodu.

Když se nasazení oříznou při publikování, budou z publikovaného výstupu odmítnuty pouze konkrétní verze balíčků manifestu, které označíte. Balíčky v uvedených verzích musí být přítomné na hostiteli, aby se aplikace spustila.

Určení cílových manifestů v souboru projektu

Alternativou k určení cílových manifestů pomocí dotnet publish příkazu je zadat je v souboru projektu jako seznam cest oddělených středníkem pod značkou <TargetManifestFiles> .

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

V souboru projektu zadejte cílové manifesty pouze v případě, že je cílové prostředí aplikace dobře známé, například pro projekty .NET Core. To neplatí pro opensourcové projekty. Uživatelé opensourcového projektu ho obvykle nasazují do různých produkčních prostředí. Tato produkční prostředí mají obecně různé sady balíčků, které jsou předinstalované. V takových prostředích nemůžete provádět předpoklady o cílovém manifestu, takže byste měli použít --manifest možnost dotnet publish.

implicitní úložiště ASP.NET Core (pouze .NET Core 2.0)

Implicitní úložiště ASP.NET Core platí jenom pro ASP.NET Core 2.0. Důrazně doporučujeme, aby aplikace používaly ASP.NET Core 2.1 a novější, což nepoužívá implicitní úložiště. ASP.NET Core 2.1 a novější použijte sdílenou architekturu.

Pro .NET Core 2.0 se funkce úložiště balíčků runtime implicitně používá aplikací ASP.NET Core, když je aplikace nasazená jako aplikace závislá na rozhraní. Cíle zahrnují Microsoft.NET.Sdk.Web manifesty odkazující na implicitní úložiště balíčků v cílovém systému. Kromě toho každá aplikace závislá na rozhraní, která závisí na Microsoft.AspNetCore.All balíčku, má za následek publikovanou aplikaci, která obsahuje pouze aplikaci a její prostředky, a ne balíčky uvedené v Microsoft.AspNetCore.All metabalíku. Předpokládá se, že tyto balíčky jsou přítomné v cílovém systému.

Při instalaci sady .NET SDK se na hostiteli nainstaluje úložiště balíčků modulu runtime. Ostatní instalační programy mohou poskytovat úložiště balíčků modulu runtime, včetně instalací zip/tarball sady .NET SDK, apt-get, Red Hat Yum, sady .NET Core Windows Server Hosting a ruční instalace úložiště balíčků runtime.

Při nasazování aplikace pro nasazení závislé na rozhraní se ujistěte, že je v cílovém prostředí nainstalovaná sada .NET SDK. Pokud je aplikace nasazená do prostředí, které neobsahuje ASP.NET Core, můžete se odhlásit z implicitního úložiště zadáním <publishWithAspNetCoreTargetManifest> nastaveného v false souboru projektu, jak je znázorněno v následujícím příkladu:

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

Poznámka:

U samostatných aplikací pro nasazení se předpokládá, že cílový systém nemusí nutně obsahovat požadované balíčky manifestu. <Proto publishWithAspNetCoreTargetManifest> nelze nastavit na true samostatnou aplikaci.

Viz také