Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.