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 --manifest
dotnet 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-get
a 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.