Megosztás a következőn keresztül:


Futtatókörnyezeti csomagtároló

A .NET Core 2.0-tól kezdve lehetőség van alkalmazások csomagolására és üzembe helyezésére a célkörnyezetben található ismert csomagokon. Az előnyök a gyorsabb üzembe helyezés, a lemezterület-használat csökkentése és bizonyos esetekben a jobb indítási teljesítmény.

Ez a funkció futtatókörnyezeti csomagtárolóként van implementálva, amely egy könyvtár a lemezen, ahol a csomagokat tárolják (általában a /usr/local/share/dotnet/store on macOS/Linux és C:/Program Files/dotnet/store on Windows). Ebben a könyvtárban az architektúrák és a cél-keretrendszerek alkönyvtárai találhatók. A fájlelrendezés hasonló ahhoz, ahogyan a NuGet-objektumok a lemezen vannak elhelyezve:

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

A céljegyzékfájl felsorolja a futtatókörnyezeti csomagtárolóban található csomagokat. A fejlesztők az alkalmazás közzétételekor megcélzhatják ezt a jegyzékfájlt. A céljegyzéket általában a célzott termelési környezet tulajdonosa adja meg.

Futtatókörnyezet előkészítése

A futtatókörnyezet rendszergazdája optimalizálhatja az alkalmazásokat a gyorsabb üzembe helyezéshez és a lemezterület csökkentéséhez egy futtatókörnyezeti csomagtároló és a megfelelő céljegyzék létrehozásával.

Az első lépés egy csomagtár-jegyzék létrehozása, amely felsorolja a futtatókörnyezeti csomagtárolót alkotó csomagokat. Ez a fájlformátum kompatibilis a projektfájl formátumával (csproj).

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

Példa

A következő példacsomagtár-jegyzékfájlt (packages.csproj) használjuk a Newtonsoft.Json és Moq futtatókörnyezeti csomagtárolóhoz történő hozzáadására:

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

A futtatókörnyezeti csomagtároló létrehozása a csomagtároló jegyzékfájl, a futtatókörnyezet és a keretrendszer használatával: dotnet store végrehajtása.

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

Példa

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

A parancsban található beállítás és elérési út megismétlésével több célcsomagtároló jegyzékútvonalát is átadhatja egyetlen dotnet store parancsnak.

Alapértelmezés szerint a parancs kimenete egy csomagtároló a felhasználó profiljának .dotnet/store alkönyvtárában. A --output <OUTPUT_DIRECTORY> opcióval másik helyet is megadhat. Az áruház gyökérkönyvtára egy célállományartifact.xml fájlt tartalmaz. Ezt a fájlt letölthetővé teheti, és olyan alkalmazásszerzők használhatják, akik közzétételkor meg szeretnék célozni ezt az áruházat.

Példa

Az előző példa futtatása után a következő artifact.xml fájl jön létre. Vegye figyelembe, hogy a Castle.Core a Moq függősége, ezért automatikusan szerepel és megjelenik a artifacts.xml jegyzékfájlban.

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

Alkalmazás közzététele célmanifeszt ellenében

Ha a lemezen van egy céljegyzékfájl, a következő paranccsal adja meg a fájl elérési útját az alkalmazás dotnet publish közzétételekor:

dotnet publish --manifest <PATH_TO_MANIFEST_FILE>

Példa

dotnet publish --manifest manifest.xml

Az eredményként közzétett alkalmazást egy olyan környezetben helyezi üzembe, amely a céljegyzékben leírt csomagokat tartalmaz. Ennek elmulasztása azt eredményezi, hogy az alkalmazás nem indul el.

Adjon meg több céljegyzéket egy alkalmazás közzétételekor a beállítás és az elérési út megismétlésével (például --manifest manifest1.xml --manifest manifest2.xml). Amikor így tesz, az alkalmazás optimalizálva lesz az parancshoz megadott cél-leíró fájlokban meghatározott csomagok egyesítésére.

Ha olyan alkalmazást telepít, amely az üzembe helyezésben található jegyzékfüggőséggel rendelkezik (a szerelvény a bin mappában található), a csomagtár nem használatos az adott szerelvény kiszolgálóján. A bin mappa összeállítást akkor is használják, ha nincs jelen a gazdagép futtatókörnyezeti csomagtárolójában.

A jegyzékben szereplő függőség verziójának meg kell egyeznie a futtatókörnyezeti csomagtároló függőségének verziójával. Ha a céljegyzékben szereplő függőség és a futtatókörnyezeti csomagtárolóban található verzió közötti verzióeltérés nem egyezik meg, és az alkalmazás nem tartalmazza a csomag szükséges verzióját az üzembe helyezésben, az alkalmazás nem indul el. A kivétel tartalmazza annak a céljegyzéknek a nevét, amely a futtatókörnyezeti csomagtároló-szerelvényt hívta meg, ami segít elhárítania az eltérést.

Ha az üzembe helyezést a közzétételkor levágják , a rendszer csak az Ön által jelzett jegyzékcsomagok adott verzióit visszatartja a közzétett kimenetből. Az alkalmazás indításához a megadott verziókban lévő csomagoknak meg kell jelenniük a gazdagépen.

Céljegyzékek megadása a projektfájlban

A céljegyzékek paranccsal dotnet publish történő megadásának másik lehetősége, ha a projektfájlban pontosvesszővel tagolt elérési utakat ad meg egy <TargetManifestFiles> címke alatt.

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

A céljegyzékeket csak akkor adja meg a projektfájlban, ha az alkalmazás célkörnyezete jól ismert, például .NET Core-projektek esetében. Nyílt forráskódú projektek esetében ez nem így van. A nyílt forráskódú projektek felhasználói általában különböző éles környezetekben helyezik üzembe. Ezek a termelési környezetek általában különböző csomagkészletekkel rendelkeznek, amelyek előre telepítve vannak. Ilyen környezetekben nem lehet feltételezéseket feltételezni a céljegyzékről, ezért a következő lehetőséget kell használnia --manifestdotnet publish: .

ASP.NET Core implicit tároló (csak .NET Core 2.0 esetén)

Az ASP.NET Core implicit tároló csak az ASP.NET Core 2.0-ra vonatkozik. Határozottan javasoljuk, hogy az alkalmazások használják a ASP.NET Core 2.1-et és újabb verziót, amely nem használja az implicit tárolót. ASP.NET Core 2.1 és újabb verziók a megosztott keretrendszert használják.

A .NET Core 2.0 esetében a futtatókörnyezeti csomagtároló funkciót implicit módon használja egy ASP.NET Core-alkalmazás, amikor az alkalmazást keretrendszerfüggő üzembehelyezési alkalmazásként helyezik üzembe. A célok között szerepelnek a Microsoft.NET.Sdk.Web célrendszer implicit csomagtárolójára vonatkozó manifesztumok. Emellett a csomagtól függő Microsoft.AspNetCore.All keretrendszerfüggő alkalmazások olyan közzétett alkalmazást eredményeznek, amely csak az alkalmazást és annak eszközeit tartalmazza, a metacsomagban Microsoft.AspNetCore.All felsorolt csomagokat nem. Feltételezzük, hogy ezek a csomagok megtalálhatók a célrendszerben.

A futtatókörnyezeti csomagtároló a .NET SDK telepítésekor települ a gazdagépre. Más telepítők biztosíthatják a futtatókörnyezeti csomagtárolót, beleértve a .NET SDK Zip/tarball telepítését, apt-geta Red Hat Yumot, a .NET Core Windows Server Hosting csomagot és a manuális futtatókörnyezeti csomagtároló telepítéseit.

Keretrendszerfüggő üzembehelyezési alkalmazás telepítésekor győződjön meg arról, hogy a célkörnyezetben telepítve van a .NET SDK. Ha az alkalmazás olyan környezetben van üzembe helyezve, amely nem tartalmazza a ASP.NET Core-t, akkor a projektfájlban megadott érték <PublishWithAspNetCoreTargetManifest> megadásával false kikapcsolhatja az implicit tárolót, ahogyan az alábbi példában látható:

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

Megjegyzés:

Önálló üzembehelyezési alkalmazások esetén feltételezzük, hogy a célrendszer nem feltétlenül tartalmazza a szükséges jegyzékcsomagokat. Ezért a <PublishWithAspNetCoreTargetManifest> nem állítható be true önálló alkalmazáshoz.

Lásd még