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 megcélzott éles 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 rendszer a következő példacsomagtár-jegyzékfájlt (packages.csproj) használja egy futtatókörnyezeti csomagtároló hozzáadásához és Moq hozzáadásáhozNewtonsoft.Json:

<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ó kiépítése a csomagtároló jegyzékfájljával, futtatókörnyezetével és keretrendszerével való végrehajtással dotnet store :

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 beállítással --output <OUTPUT_DIRECTORY> másik helyet is megadhat. Az áruház gyökérkönyvtára egy céljegyzéket artifact.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 Castle.Core ez a függősége Moq, ezért automatikusan szerepel benne, é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éljegyzéken

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). Ha így tesz, az alkalmazás le lesz vágva a parancshoz megadott céljegyzékfájlokban megadott csomagok egyesítéséhez.

Ha olyan alkalmazást helyez üzembe, amely az üzembe helyezésben található jegyzékfüggőséggel rendelkezik (a szerelvény a bin mappában található), a futtatókörnyezeti csomagtároló nem használatos az adott szerelvény gazdagépén. A tárolómappa-szerelvényt a gazdagép futtatókörnyezeti csomagtárolójában való jelenléttől függetlenül használja a rendszer.

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 pontosvesszővel tagolt elérési utakat tartalmazó listaként adja meg őket a projektfájlban a <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 az éles környezetek általában különböző csomagkészletekkel rendelkeznek előre telepítve. 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)

A ASP.NET Core implicit tároló csak a Core 2.0 ASP.NET vonatkozik. Határozottan javasoljuk, hogy az alkalmazások ASP.NET Core 2.1-et és újabb verziót használjanak, 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ás keretrendszerfüggő üzembehelyezési alkalmazásként van üzembe helyezve. A célok közé tartoznak a Microsoft.NET.Sdk.Web célrendszer implicit csomagtárolójára hivatkozó jegyzékek. 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, a PublishWithAspNetCoreTargetManifest a projektfájlban megadott false PublishWithAspNetCoreTargetManifest> beállításával <kikapcsolhatja az implicit tárolót, ahogyan az alábbi példában látható:

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

Feljegyzé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ásokhoz.

Lásd még