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.
Note
Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.
Warning
A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .
Egy IHostingStartup (hosting indítási környezet) implementáció fejlesztéseket ad hozzá egy alkalmazáshoz indításkor egy külső könyvtárból. Egy külső könyvtár például is képes tárhelyindítási implementáció segítségével további konfigurációs szolgáltatókat és szolgáltatásokat biztosítani egy alkalmazásnak.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
HostingStartup attribútum
A HostingStartup attribútum egy üzemeltetési indítási szerelvény jelenlétét jelzi, amely futásidőben aktiválódik.
A rendszer automatikusan ellenőrzi az Startup attribútumra nézve a HostingStartup osztályt tartalmazó belépési szerelvényt vagy szerelvényt. Az attribútumok kereséséhez HostingStartup szükséges szerelvények listája futásidőben töltődik be a WebHostDefaults.HostingStartupAssembliesKey konfigurációjából. A felderítésből kizárandó szerelvények listája a WebHostDefaults.HostingStartupExcludeAssembliesKey fájlból töltődik be.
A következő példában az üzemeltető indító assembly névtere: StartupEnhancement. Az üzemeltetési indítási kódot tartalmazó osztály a következő StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Az HostingStartup attribútum általában a hosztoló indítószerelvény implementációs osztályfájljában található IHostingStartup.
A betöltött hoszting indítások összeállításainak felfedezése
A betöltött hosting indítási összeállítások felderítéséhez engedélyezze a naplózást, és ellenőrizze az alkalmazás naplóit. A rendszer a szerelvények betöltésekor előforduló hibákat naplózza. A betöltött indulási összetevők a Debug szinten vannak naplózva, és minden hibát naplóznak.
Hosztoló indítási összetevők automatikus betöltésének letiltása
Az indítási összetevők automatikus betöltésének letiltásához használja az alábbi módszerek egyikét:
Ha meg szeretné akadályozni, hogy az összes hosztolt indítási összeállítás betöltődjön, állítsa az alábbiak egyikét a következőre
truevagy1:Az tárhelyszolgáltatás indítási konfigurációs beállításainak megelőzése:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.PreventHostingStartupKey, "true") .UseStartup<Startup>(); });ASPNETCORE_PREVENTHOSTINGSTARTUPkörnyezeti változó.
Ha meg szeretné akadályozni, hogy bizonyos üzemeltetési indítási szerelvények betöltődjenek, érdemes beállítani az alábbiak egyikét pontosvesszővel tagolt, indításkor kizárandó üzemeltetési indítási szerelvények listájára:
A hoszt konfigurációs beállításaival kizárható összeállítások az indításkor:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.HostingStartupExcludeAssembliesKey, "{ASSEMBLY1;ASSEMBLY2; ...}") .UseStartup<Startup>(); });A
{ASSEMBLY1;ASSEMBLY2; ...}helyettesítő a szerelvények pontosvesszővel tagolt listáját jelöli.ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIESkörnyezeti változó.
Ha a gazdagép konfigurációs beállítása és a környezeti változó is be van állítva, a gazdabeállítás szabályozza a viselkedést.
Ha letiltja az indítási szerelvények üzemeltetését a gazdagépbeállítás vagy a környezeti változó használatával, az globálisan letiltja a szerelvényt, és az alkalmazás több jellemzőjét is letilthatja.
Project
Hozzon létre egy üzemeltetési indítást az alábbi projekttípusok valamelyikével:
Osztálytár
Egy hosting szolgáltatás fejlesztése egy osztálykönyvtárban is elérhető. A kódtár tartalmaz egy HostingStartup attribútumot.
A mintakód tartalmaz egy Pages-alkalmazást, a RazorHostingStartupAppot és egy osztálytárat, a HostingStartupLibraryt. Az osztálykódtár:
- Egy hostindító osztályt tartalmaz,
ServiceKeyInjection, amely implementálja azIHostingStartup-t.ServiceKeyInjectionEgy pár szolgáltatáskódot ad hozzá az alkalmazás konfigurációjához a memóriában tárolt konfigurációs szolgáltató (AddInMemoryCollection) használatával. - Tartalmaz egy
HostingStartupattribútumot, amely azonosítja az üzemeltető startup névterét és osztályát.
Az ServiceKeyInjection osztály Configure metódusa IWebHostBuilder továbbfejlesztéseket ad egy alkalmazáshoz.
HostingStartupLibrary/ServiceKeyInjection.cs:
[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]
namespace HostingStartupLibrary
{
public class ServiceKeyInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(config =>
{
var dict = new Dictionary<string, string>
{
{"DevAccount_FromLibrary", "DEV_1111111-1111"},
{"ProdAccount_FromLibrary", "PROD_2222222-2222"}
};
config.AddInMemoryCollection(dict);
});
}
}
}
Az alkalmazás indexoldala beolvassa és megjeleníti az osztálytár indítási szerelvénye által beállított két kulcs konfigurációs értékeit:
HostingStartupApp/Pages/Index.cshtml.cs:
public class IndexModel : PageModel
{
public IndexModel(IConfiguration config)
{
ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
ServiceKey_Development_Package = config["DevAccount_FromPackage"];
ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
}
public string ServiceKey_Development_Library { get; private set; }
public string ServiceKey_Production_Library { get; private set; }
public string ServiceKey_Development_Package { get; private set; }
public string ServiceKey_Production_Package { get; private set; }
public void OnGet()
{
}
}
A mintakód tartalmaz egy NuGet-csomagprojektet is, amely egy különálló üzemeltetési indítást, a HostingStartupPackage-t biztosít. A csomag jellemzői megegyeznek a korábban ismertetett osztálykódtár jellemzőivel. A csomag:
- Egy hostindító osztályt tartalmaz,
ServiceKeyInjection, amely implementálja azIHostingStartup-t.ServiceKeyInjectionhozzáad egy pár szolgáltatási sztringet az alkalmazás konfigurációjához. - Tartalmaz egy
HostingStartupattribútumot.
HostingStartupPackage/ServiceKeyInjection.cs:
[assembly: HostingStartup(typeof(HostingStartupPackage.ServiceKeyInjection))]
namespace HostingStartupPackage
{
public class ServiceKeyInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(config =>
{
var dict = new Dictionary<string, string>
{
{"DevAccount_FromPackage", "DEV_3333333-3333"},
{"ProdAccount_FromPackage", "PROD_4444444-4444"}
};
config.AddInMemoryCollection(dict);
});
}
}
}
Az alkalmazás indexoldala beolvassa és megjeleníti a csomag üzemeltetési indítási szerelvénye által beállított két kulcs konfigurációs értékeit:
HostingStartupApp/Pages/Index.cshtml.cs:
public class IndexModel : PageModel
{
public IndexModel(IConfiguration config)
{
ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
ServiceKey_Development_Package = config["DevAccount_FromPackage"];
ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
}
public string ServiceKey_Development_Library { get; private set; }
public string ServiceKey_Production_Library { get; private set; }
public string ServiceKey_Development_Package { get; private set; }
public string ServiceKey_Production_Package { get; private set; }
public void OnGet()
{
}
}
Konzolalkalmazás belépési pont nélkül
Ez a megközelítés csak .NET-alkalmazásokhoz érhető el, a .NET-keretrendszerhez nem.
A dinamikus üzemeltetés indítási fejlesztése, amely nem igényel fordítási idő referenciát az aktiváláshoz, egy konzolalkalmazásban attribútumot HostingStartup tartalmazó belépési pont nélkül is megadható. A konzolalkalmazás közzététele egy tárhelyindító összetevőt hoz létre, amely felhasználható a futtatókörnyezeti áruházból.
Ebben a folyamatban egy belépési pont nélküli konzolalkalmazást használunk, mert:
- A hostoló indítási környezetben való használathoz szükséges egy függőségi fájl. A függőségi fájl egy olyan futtatható alkalmazási eszköz, amelyet egy alkalmazás közzétételével állítanak elő, nem pedig könyvtárból.
- A tárak nem vehetők fel közvetlenül a futtatókörnyezeti csomagtárolóba, amelyhez egy futtatható projektre van szükség, amely a megosztott futtatókörnyezetet célozza.
Új dinamikus hoszting vállalkozás létrehozásakor:
- A rendszer egy üzemeltetési indítási szerelvényt hoz létre a konzolalkalmazásból a következő belépési pont nélkül:
- Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást
IHostingStartup. - Tartalmaz egy HostingStartup attribútumot a megvalósítási
IHostingStartuposztály azonosításához.
- Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást
- A konzolalkalmazás közzététele a hosting startup függőségeinek lekérésére szolgál. A konzolalkalmazás közzétételének egyik következménye, hogy a nem használt függőségek ki vannak vágva a függőségek fájlból.
- A függőségi fájlt módosítják az üzemeltetési indítási szerelvény futtatókörnyezeti helyének beállításához.
- Az üzemeltetési indítási szerelvény és annak függőségi fájlja a futtatókörnyezeti csomagtárolóba kerül. A hosztolási startup assembly és annak függőségei fájljának felderítéséhez páros környezeti változókban vannak megtalálhatóak.
A konzolalkalmazás a Microsoft.AspNetCore.Hosting.Abstractions csomagra hivatkozik :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="3.0.0" />
</ItemGroup>
</Project>
A HostingStartup attribútum azonosítja az osztályt mint a betöltés és a végrehajtás implementációját, amikor a IHostingStartup létrejön. Az alábbi példában a névtér a következő StartupEnhancement, az osztály pedig a következő StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Egy osztály implementálja .IHostingStartup Az osztály Configure módszert használ IWebHostBuilder, hogy fejlesztéseket adjon egy alkalmazáshoz.
IHostingStartup.Configure a tárhely induló összeállítást a futtatókörnyezet meghívja a felhasználói kód előtt Startup.Configure , amely lehetővé teszi a felhasználói kód számára, hogy felülírja a tárhely induló összeállítás által biztosított konfigurációt.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Projekt létrehozásakor IHostingStartup a függőségi fájl (.deps.json) a runtime szerelvény helyét a bin mappára állítja:
"targets": {
".NETCoreApp,Version=v3.0": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "3.0.0"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
A fájlnak csak egy része jelenik meg. A példában a szerelvény neve a következő StartupEnhancement: .
Az üzemeltetési indítás által biztosított konfiguráció
A konfiguráció kezelésének két megközelítése van attól függően, hogy az üzemeltetési indítás konfigurációja elsőbbséget élvez-e, vagy az alkalmazás konfigurációja elsőbbséget élvez:
- Adjon konfigurációt az alkalmazásnak ConfigureAppConfiguration, hogy a konfiguráció betöltődjön az alkalmazás ConfigureAppConfiguration delegáltjainak végrehajtása után. Az indítási konfiguráció üzemeltetése ezzel a módszerrel elsőbbséget élvez az alkalmazás konfigurációjával szemben.
- Adjon meg konfigurációt az alkalmazásnak UseConfiguration, amely betölti a konfigurációt, mielőtt az alkalmazás delegáltjai ConfigureAppConfiguration végrehajtanák. Az alkalmazás konfigurációs értékei elsőbbséget élveznek az üzemeltetési indítás által biztosított értékekkel szemben ezzel a módszerrel.
public class ConfigurationInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
Dictionary<string, string> dict;
builder.ConfigureAppConfiguration(config =>
{
dict = new Dictionary<string, string>
{
{"ConfigurationKey1",
"From IHostingStartup: Higher priority " +
"than the app's configuration."},
};
config.AddInMemoryCollection(dict);
});
dict = new Dictionary<string, string>
{
{"ConfigurationKey2",
"From IHostingStartup: Lower priority " +
"than the app's configuration."},
};
var builtConfig = new ConfigurationBuilder()
.AddInMemoryCollection(dict)
.Build();
builder.UseConfiguration(builtConfig);
}
}
Az üzemeltetés indítási szerelvényének megadása
Osztálykönyvtár vagy konzolos alkalmazás által biztosított üzemeltetési indítás esetén adja meg az üzemeltetési indítás assembly nevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóban. A környezeti változó a szerelvények pontosvesszővel tagolt listája.
Csak az indítási szerelvények vannak szkennelve a HostingStartup attribútum tekintetében. A HostingStartupApp mintaalkalmazás esetében a korábban ismertetett üzemeltetési startupok felderítéséhez a környezeti változó a következő értékre van állítva:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
Az üzemeltetési indítási szerelvény a Hosting Startup Assemblies állomáskonfigurációs beállításával is beállítható:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey,
"{ASSEMBLY1;ASSEMBLY2; ...}")
.UseStartup<Startup>();
});
A {ASSEMBLY1;ASSEMBLY2; ...} helyettesítő a szerelvények pontosvesszővel tagolt listáját jelöli.
Ha több tárhely indítási modul van jelen, a Configure metódusok végrehajtása a felsorolt sorrendben történik.
Activation
Az indítási aktiválás üzemeltetésének lehetőségei a következők:
- Futtatókörnyezeti tároló: Az aktiváláshoz nem szükséges fordítási idejű referencia. A mintaalkalmazás egy deployment mappába helyezi a hosztindító összeállítást és a függőségi fájlokat, hogy megkönnyítse a hosztindító üzembe helyezését többgépes környezetben. Az üzembehelyezési mappa tartalmaz egy PowerShell-szkriptet is, amely környezeti változókat hoz létre vagy módosít az üzembe helyezési rendszeren az üzemeltetési indítás engedélyezéséhez.
- Az aktiváláshoz szükséges fordítási idejű hivatkozás
Futtatókörnyezeti tároló
A hosting startup implementáció a runtime store-ban található. A továbbfejlesztett alkalmazás nem igényel fordítási időben történő hivatkozást az assemblyre.
A tárhelyindítás létrehozása után a rendszer létrehoz egy runtime tárat a manifeszt projektfájl és a dotnet store parancs használatával.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
A mintaalkalmazásban (RuntimeStore projekt) a következő parancsot használja:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezeti tárolót, a rendszer hozzáadja a futtatókörnyezeti tároló helyét a DOTNET_SHARED_STORE környezeti változóhoz.
A tárhely indítás függőségi fájljának módosítása és elhelyezése
Ha a fejlesztést csomaghivatkozás nélkül szeretné aktiválni, adjon meg további függőségeket a futtatókörnyezethez a következővel additionalDeps: .
additionalDeps lehetővé teszi, hogy:
- Bővítse ki az alkalmazás kódtár-gráfját úgy, hogy további
.deps.jsonfájlokat biztosít az alkalmazás saját.deps.jsonfájljával való egyesítéshez indításkor. - A hosztolási indítási összetevő felderíthetővé és betölthetővé tétele.
A további függőségi fájlok létrehozásának ajánlott módszere a következő:
- Hajtsa végre
dotnet publishaz előző szakaszban említett futtatási környezet tárolójának manifesztfájlján. - Távolítsa el a manifeszt hivatkozást a kódtárakból és az így kapott
runtimefájl.deps.jsonszakaszából.
A példaprojektben a store.manifest/1.0.0 tulajdonság el van távolítva a targets és libraries szakaszból.
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.0": {
"store.manifest/1.0.0": {
"dependencies": {
"StartupDiagnostics": "1.0.0"
},
"runtime": {
"store.manifest.dll": {}
}
},
"StartupDiagnostics/1.0.0": {
"runtime": {
"lib/netcoreapp3.0/StartupDiagnostics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"store.manifest/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StartupDiagnostics/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xrhzuNSyM5/f4ZswhooJ9dmIYLP64wMnqUJSyTKVDKDVj5T+qtzypl8JmM/aFJLLpYrf0FYpVWvGujd7/FfMEw==",
"path": "startupdiagnostics/1.0.0",
"hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
}
}
}
Helyezze a .deps.json fájlt a következő helyre:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
-
{ADDITIONAL DEPENDENCIES PATH}: A környezeti változóhozDOTNET_ADDITIONAL_DEPShozzáadott hely. -
{SHARED FRAMEWORK NAME}: Ehhez a további függőségi fájlhoz közös keretrendszer szükséges. -
{SHARED FRAMEWORK VERSION}: A megosztott keretrendszer minimális verziója. -
{ENHANCEMENT ASSEMBLY NAME}: A fejlesztés összeállításának neve.
A mintaalkalmazásban (RuntimeStore-projekt ) a további függőségi fájl a következő helyre kerül:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/3.0.0/StartupDiagnostics.deps.json
Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezet tárolójának helyét, a rendszer hozzáadja a további függőségek fájlhelyét a DOTNET_ADDITIONAL_DEPS környezeti változóhoz.
Note
A DOTNET_ADDITIONAL_DEPS környezeti változó csak keretrendszerfüggő alkalmazásokkal működik. Ezt a környezeti változót a rendszer figyelmen kívül hagyja az önálló alkalmazások esetében.
A mintaalkalmazásban (RuntimeStore-projekt ) a futtatókörnyezeti tároló létrehozása és a további függőségek fájljának létrehozása PowerShell-szkripttel történik.
A különböző operációs rendszerek környezeti változóinak beállítására vonatkozó példákért lásd: Több környezet használata.
Deployment
A többtényezős környezetben futó üzemeltetési indítás üzembe helyezésének megkönnyítése érdekében a mintaalkalmazás létrehoz egy üzembehelyezési mappát a közzétett kimenetben, amely a következőket tartalmazza:
- Az üzemeltetési futtatókörnyezet tárolója.
- Az hosztolási indítási függőségek fájlja.
- Egy PowerShell-szkript, amely létrehozza vagy módosítja a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES,DOTNET_SHARED_STORE, ésDOTNET_ADDITIONAL_DEPSannak érdekében, hogy támogassa az üzemeltetési indítás aktiválását. Futtassa a szkriptet egy rendszergazdai PowerShell-parancssorból az üzembe helyezési rendszeren.
NuGet-csomag
Egy üzemeltetési indítási fejlesztés nuGet-csomagban is elérhető. A csomagnak van egy HostingStartup attribútuma. A csomag által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:
- A továbbfejlesztett alkalmazás projektfájlja csomaghivatkozást készít az alkalmazás projektfájljában található üzemeltetési indításhoz (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (
.deps.json). Ez a megközelítés a nuget.org számára közzétett üzemeltetési indítási szerelvénycsomagra vonatkozik. - A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
A NuGet-csomagokról és a futtatókörnyezet tárolójáról az alábbi témakörökben talál további információt:
- NuGet-csomag létrehozása platformfüggetlen eszközökkel
- Közzétételi csomagok
- Futtatókörnyezeti csomagtároló
Projekttároló mappa
A hoszting startup fejlesztését a továbbfejlesztett alkalmazásban egy bin-telepített gyűjtemény biztosíthatja. A szerelvény által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:
- A továbbfejlesztett alkalmazás projektfájlja összeállítási hivatkozást készít az üzemeltetési indítási folyamatra (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (
.deps.json). Ez a megközelítés akkor alkalmazható, ha az üzembe helyezési forgatókönyv fordításidejű hivatkozást kér az üzemeltetési indítási összeállítására (.dll fájlra), és az összeállítást vagy az alábbi helyek egyikére helyezi át:- A fogyasztó projekt.
- A felhasználói projekt által elérhető helyszín.
- A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
- A .NET-keretrendszer megcélzásakor a szerelvény az alapértelmezett terhelési környezetben tölthető be, ami a .NET-keretrendszeren azt jelenti, hogy a szerelvény az alábbi helyek valamelyikén található:
- Alkalmazás alap elérési útja: Az a bin mappa, amelyben az alkalmazás végrehajtható (.exe) található.
- Globális Assembly Gyorsítótár (GAC): A GAC olyan assemblyket tárol, amelyeket több .NET-keretrendszer alkalmazás is használ. További információért lásd Hogyan: Szerelvény telepítése a globális szerelvény-gyorsítótárba a .NET-keretrendszer dokumentációjában.
példakód
A mintakód (letöltés) bemutatja az indítási megvalósítási forgatókönyvek üzemeltetését:
- Két üzemeltetési indítási szerelvény (osztálykódtár) állít be egy-egy memóriabeli konfigurációs kulcs-érték párot:
- NuGet-csomag (HostingStartupPackage)
- Osztálykönyvtár (HostingStartupLibrary)
- Egy hosztolási indulás egy tárhely-raktárba telepített szerelvényből (StartupDiagnostics) aktiválódik. A szerelvény két köztes szoftvert ad hozzá az alkalmazáshoz indításkor, amelyek diagnosztikai információkat nyújtanak a következőkkel kapcsolatban:
- Regisztrált szolgáltatások
- Cím (séma, gazdagép, útvonal alapja, elérési út, lekérdezési string)
- Kapcsolat (távoli IP-cím, távoli port, helyi IP-cím, helyi port, ügyféltanúsítvány)
- HTTP-kérés fejlécek
- Környezeti változók
A minta futtatásához:
Aktiválás NuGet-csomagból
Állítsa össze a HostingStartupPackage csomagot a dotnet pack paranccsal.
Adja hozzá a csomag HostingStartupPackage szerelvénynevét a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz.Állítsa össze és futtassa az alkalmazást. A bővített alkalmazásban egy csomag referenciája van jelen (fordítási idő hivatkozás). Az
<PropertyGroup>alkalmazás projektfájljában a csomagprojekt kimenetét (../HostingStartupPackage/bin/Debug) csomagforrásként adja meg. Ez lehetővé teszi, hogy az alkalmazás anélkül használja a csomagot, hogy feltöltené a csomagot a nuget.org. További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>Figyelje meg, hogy az Index lap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek a csomag metódusa
ServiceKeyInjection.Configureáltal beállított értékekkel.
Ha módosítja a HostingStartupPackage projektet, és újrafordít, törölje a helyi NuGet-csomag gyorsítótárait, hogy a HostingStartupApp megkapja a frissített csomagot, és ne a helyi gyorsítótárból származó elavult csomagot. A helyi NuGet-gyorsítótárak törléséhez hajtsa végre a következő dotnet nuget locals parancsot:
dotnet nuget locals all --clear
Aktiválás osztálytárból
Állítsa össze a HostingStartupLibrary osztálytárat a dotnet build parancsával.
Adja hozzá az osztálytár HostingStartupLibrary szerelvénynevét a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz.helyezze üzembe az osztálytár szerelvényét az alkalmazásban az osztálytár lefordított kimenetéből a HostingStartupLibrary.dll fájl másolásával az alkalmazás bin/Debug mappájába.
Állítsa össze és futtassa az alkalmazást. Az
<ItemGroup>alkalmazás projektfájljában az osztálykönyvtár szerelvényét (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) hivatkozza meg (fordítási idejű hivatkozásként). További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>Figyelje meg, hogy az Indexlap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek az osztálytár metódusa
ServiceKeyInjection.Configureáltal beállított értékekkel.
Aktiválás futtatókörnyezetben üzembe helyezett szerelvényből
- A StartupDiagnostics projekt a PowerShell használatával módosítja a fájlját
StartupDiagnostics.deps.json. A PowerShell alapértelmezés szerint a Windows 7 SP1-től és a Windows Server 2008 R2 SP1-től kezdve telepítve van. Ha más platformokon szeretné beszerezni a PowerShellt, olvassa el a PowerShell különböző verzióinak telepítését. - Hajtsa végre a build.ps1 szkriptet a RuntimeStore mappában. A szkript:
- Létrehozza a
StartupDiagnosticscsomagot az obj\packages mappában. - Létrehozza a futtatókörnyezeti tárolót
StartupDiagnosticsaz áruház mappájában. Adotnet storeszkript parancsa awin7-x64futtatókörnyezet azonosítóját (RID) használja a Windowsra telepített hosztelési indításhoz. Amikor másik futtatókörnyezethez adja meg a üzemeltetési indítást, cserélje le a megfelelő RID-et a szkript 37. sorában. AStartupDiagnosticsfuttatási tárolót később áthelyezik a felhasználó vagy a rendszer futtatási tárolójába azon a gépen, amelyen a szerelvényt használni fogják. AStartupDiagnosticsszerelvény felhasználói futtatókörnyezeti tárolójának telepítési helye a .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll. - Létrehozza a
additionalDepsaStartupDiagnosticsszámára az additionalDeps mappában. A további függőségek később átkerülnek a felhasználó vagy a rendszer további függőségeibe. A felhasználóStartupDiagnosticstovábbi függőségeinek telepítési helye a.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json. - A deploy.ps1 fájlt a központi telepítési mappába helyezi.
- Létrehozza a
- Futtassa a deploy.ps1 szkriptet az üzembe helyezési mappában. A szkript hozzáfűzi a következőt:
-
StartupDiagnosticsaASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz. - Az indítási függőségek útvonalát (a RuntimeStore projekt üzembehelyezési mappájában) a
DOTNET_ADDITIONAL_DEPSkörnyezeti változóhoz kell megadni. - A futtatókörnyezet-tároló elérési útja (a RuntimeStore projekt üzembehelyezési mappájában) a
DOTNET_SHARED_STOREkörnyezeti változóhoz.
-
- Futtassa a mintaalkalmazást.
- Kérje meg a
/servicesvégpontot az alkalmazás regisztrált szolgáltatásainak megtekintéséhez. Kérje meg a/diagvégpontot a diagnosztikai információk megtekintéséhez.
Egy IHostingStartup (hosting indítási környezet) implementáció fejlesztéseket ad hozzá egy alkalmazáshoz indításkor egy külső könyvtárból. Egy külső könyvtár például is képes tárhelyindítási implementáció segítségével további konfigurációs szolgáltatókat és szolgáltatásokat biztosítani egy alkalmazásnak.
Mintakód megtekintése vagy letöltése (hogyan töltsd le)
HostingStartup attribútum
A HostingStartup attribútum egy üzemeltetési indítási szerelvény jelenlétét jelzi, amely futásidőben aktiválódik.
A rendszer automatikusan ellenőrzi az Startup attribútumra nézve a HostingStartup osztályt tartalmazó belépési szerelvényt vagy szerelvényt. Az attribútumok kereséséhez HostingStartup szükséges szerelvények listája futásidőben töltődik be a WebHostDefaults.HostingStartupAssembliesKey konfigurációjából. A felderítésből kizárandó szerelvények listája a WebHostDefaults.HostingStartupExcludeAssembliesKey fájlból töltődik be. További információkért lásd: Webgazda: Indítási szerelvények üzemeltetése és Webgazda: Indítási szerelvények kizárása üzemeltetéskor.
A következő példában az üzemeltető indító assembly névtere: StartupEnhancement. Az üzemeltetési indítási kódot tartalmazó osztály a következő StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Az HostingStartup attribútum általában a hosztoló indítószerelvény implementációs osztályfájljában található IHostingStartup.
A betöltött hoszting indítások összeállításainak felfedezése
A betöltött hosting indítási összeállítások felderítéséhez engedélyezze a naplózást, és ellenőrizze az alkalmazás naplóit. A rendszer a szerelvények betöltésekor előforduló hibákat naplózza. A betöltött indulási összetevők a Debug szinten vannak naplózva, és minden hibát naplóznak.
Hosztoló indítási összetevők automatikus betöltésének letiltása
Az indítási összetevők automatikus betöltésének letiltásához használja az alábbi módszerek egyikét:
- Annak érdekében, hogy megakadályozza az összes hoszting indítási összetevő betöltését, állítsa egyik alábbi beállítást a következő értékek egyikére:
truevagy1.- A tárhelyindítás megakadályozása a hoszt konfigurációs beállításában.
-
ASPNETCORE_PREVENTHOSTINGSTARTUPkörnyezeti változó.
- Ha meg szeretné akadályozni, hogy bizonyos indítási szerelvények betöltődjenek, állítsa az alábbiak egyikét egy pontosvesszővel elválasztott, indításkor kizárandó szerelvények listájára:
- Az indítási indítás kizárása állomáskonfigurációs beállítás.
-
ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIESkörnyezeti változó.
Ha a gazdagép konfigurációs beállítása és a környezeti változó is be van állítva, a gazdabeállítás szabályozza a viselkedést.
Ha letiltja az indítási szerelvények üzemeltetését a gazdagépbeállítás vagy a környezeti változó használatával, az globálisan letiltja a szerelvényt, és az alkalmazás több jellemzőjét is letilthatja.
Project
Hozzon létre egy üzemeltetési indítást az alábbi projekttípusok valamelyikével:
Osztálytár
Egy hosting szolgáltatás fejlesztése egy osztálykönyvtárban is elérhető. A kódtár tartalmaz egy HostingStartup attribútumot.
A mintakód tartalmaz egy Pages-alkalmazást, a RazorHostingStartupAppot és egy osztálytárat, a HostingStartupLibraryt. Az osztálykódtár:
- Egy hostindító osztályt tartalmaz,
ServiceKeyInjection, amely implementálja azIHostingStartup-t.ServiceKeyInjectionEgy pár szolgáltatáskódot ad hozzá az alkalmazás konfigurációjához a memóriában tárolt konfigurációs szolgáltató (AddInMemoryCollection) használatával. - Tartalmaz egy
HostingStartupattribútumot, amely azonosítja az üzemeltető startup névterét és osztályát.
Az ServiceKeyInjection osztály Configure metódusa IWebHostBuilder továbbfejlesztéseket ad egy alkalmazáshoz.
HostingStartupLibrary/ServiceKeyInjection.cs:
[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]
namespace HostingStartupLibrary
{
public class ServiceKeyInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(config =>
{
var dict = new Dictionary<string, string>
{
{"DevAccount_FromLibrary", "DEV_1111111-1111"},
{"ProdAccount_FromLibrary", "PROD_2222222-2222"}
};
config.AddInMemoryCollection(dict);
});
}
}
}
Az alkalmazás indexoldala beolvassa és megjeleníti az osztálytár indítási szerelvénye által beállított két kulcs konfigurációs értékeit:
HostingStartupApp/Pages/Index.cshtml.cs:
public class IndexModel : PageModel
{
public IndexModel(IConfiguration config)
{
ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
ServiceKey_Development_Package = config["DevAccount_FromPackage"];
ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
}
public string ServiceKey_Development_Library { get; private set; }
public string ServiceKey_Production_Library { get; private set; }
public string ServiceKey_Development_Package { get; private set; }
public string ServiceKey_Production_Package { get; private set; }
public void OnGet()
{
}
}
A mintakód tartalmaz egy NuGet-csomagprojektet is, amely egy különálló üzemeltetési indítást, a HostingStartupPackage-t biztosít. A csomag jellemzői megegyeznek a korábban ismertetett osztálykódtár jellemzőivel. A csomag:
- Egy hostindító osztályt tartalmaz,
ServiceKeyInjection, amely implementálja azIHostingStartup-t.ServiceKeyInjectionhozzáad egy pár szolgáltatási sztringet az alkalmazás konfigurációjához. - Tartalmaz egy
HostingStartupattribútumot.
HostingStartupPackage/ServiceKeyInjection.cs:
[assembly: HostingStartup(typeof(HostingStartupPackage.ServiceKeyInjection))]
namespace HostingStartupPackage
{
public class ServiceKeyInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureAppConfiguration(config =>
{
var dict = new Dictionary<string, string>
{
{"DevAccount_FromPackage", "DEV_3333333-3333"},
{"ProdAccount_FromPackage", "PROD_4444444-4444"}
};
config.AddInMemoryCollection(dict);
});
}
}
}
Az alkalmazás indexoldala beolvassa és megjeleníti a csomag üzemeltetési indítási szerelvénye által beállított két kulcs konfigurációs értékeit:
HostingStartupApp/Pages/Index.cshtml.cs:
public class IndexModel : PageModel
{
public IndexModel(IConfiguration config)
{
ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
ServiceKey_Development_Package = config["DevAccount_FromPackage"];
ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
}
public string ServiceKey_Development_Library { get; private set; }
public string ServiceKey_Production_Library { get; private set; }
public string ServiceKey_Development_Package { get; private set; }
public string ServiceKey_Production_Package { get; private set; }
public void OnGet()
{
}
}
Konzolalkalmazás belépési pont nélkül
Ez a megközelítés csak .NET-alkalmazásokhoz érhető el, a .NET-keretrendszerhez nem.
A dinamikus üzemeltetés indítási fejlesztése, amely nem igényel fordítási idő referenciát az aktiváláshoz, egy konzolalkalmazásban attribútumot HostingStartup tartalmazó belépési pont nélkül is megadható. A konzolalkalmazás közzététele egy tárhelyindító összetevőt hoz létre, amely felhasználható a futtatókörnyezeti áruházból.
Ebben a folyamatban egy belépési pont nélküli konzolalkalmazást használunk, mert:
- A hostoló indítási környezetben való használathoz szükséges egy függőségi fájl. A függőségi fájl egy olyan futtatható alkalmazási eszköz, amelyet egy alkalmazás közzétételével állítanak elő, nem pedig könyvtárból.
- A tárak nem vehetők fel közvetlenül a futtatókörnyezeti csomagtárolóba, amelyhez egy futtatható projektre van szükség, amely a megosztott futtatókörnyezetet célozza.
Új dinamikus hoszting vállalkozás létrehozásakor:
- A rendszer egy üzemeltetési indítási szerelvényt hoz létre a konzolalkalmazásból a következő belépési pont nélkül:
- Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást
IHostingStartup. - Tartalmaz egy HostingStartup attribútumot a megvalósítási
IHostingStartuposztály azonosításához.
- Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást
- A konzolalkalmazás közzététele a hosting startup függőségeinek lekérésére szolgál. A konzolalkalmazás közzétételének egyik következménye, hogy a nem használt függőségek ki vannak vágva a függőségek fájlból.
- A függőségi fájlt módosítják az üzemeltetési indítási szerelvény futtatókörnyezeti helyének beállításához.
- Az üzemeltetési indítási szerelvény és annak függőségi fájlja a futtatókörnyezeti csomagtárolóba kerül. A hosztolási startup assembly és annak függőségei fájljának felderítéséhez páros környezeti változókban vannak megtalálhatóak.
A konzolalkalmazás a Microsoft.AspNetCore.Hosting.Abstractions csomagra hivatkozik :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="2.1.1" />
</ItemGroup>
</Project>
A HostingStartup attribútum azonosítja az osztályt mint a betöltés és a végrehajtás implementációját, amikor a IHostingStartup létrejön. Az alábbi példában a névtér a következő StartupEnhancement, az osztály pedig a következő StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Egy osztály implementálja .IHostingStartup Az osztály Configure módszert használ IWebHostBuilder, hogy fejlesztéseket adjon egy alkalmazáshoz.
IHostingStartup.Configure a tárhely induló összeállítást a futtatókörnyezet meghívja a felhasználói kód előtt Startup.Configure , amely lehetővé teszi a felhasználói kód számára, hogy felülírja a tárhely induló összeállítás által biztosított konfigurációt.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Projekt létrehozásakor IHostingStartup a függőségi fájl (.deps.json) a runtime szerelvény helyét a bin mappára állítja:
"targets": {
".NETCoreApp,Version=v2.1": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
A fájlnak csak egy része jelenik meg. A példában a szerelvény neve a következő StartupEnhancement: .
Az üzemeltetési indítás által biztosított konfiguráció
A konfiguráció kezelésének két megközelítése van attól függően, hogy az üzemeltetési indítás konfigurációja elsőbbséget élvez-e, vagy az alkalmazás konfigurációja elsőbbséget élvez:
- Adjon konfigurációt az alkalmazásnak ConfigureAppConfiguration, hogy a konfiguráció betöltődjön az alkalmazás ConfigureAppConfiguration delegáltjainak végrehajtása után. Az indítási konfiguráció üzemeltetése ezzel a módszerrel elsőbbséget élvez az alkalmazás konfigurációjával szemben.
- Adjon meg konfigurációt az alkalmazásnak UseConfiguration, amely betölti a konfigurációt, mielőtt az alkalmazás delegáltjai ConfigureAppConfiguration végrehajtanák. Az alkalmazás konfigurációs értékei elsőbbséget élveznek az üzemeltetési indítás által biztosított értékekkel szemben ezzel a módszerrel.
public class ConfigurationInjection : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
Dictionary<string, string> dict;
builder.ConfigureAppConfiguration(config =>
{
dict = new Dictionary<string, string>
{
{"ConfigurationKey1",
"From IHostingStartup: Higher priority " +
"than the app's configuration."},
};
config.AddInMemoryCollection(dict);
});
dict = new Dictionary<string, string>
{
{"ConfigurationKey2",
"From IHostingStartup: Lower priority " +
"than the app's configuration."},
};
var builtConfig = new ConfigurationBuilder()
.AddInMemoryCollection(dict)
.Build();
builder.UseConfiguration(builtConfig);
}
}
Az üzemeltetés indítási szerelvényének megadása
Osztálykönyvtár vagy konzolos alkalmazás által biztosított üzemeltetési indítás esetén adja meg az üzemeltetési indítás assembly nevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóban. A környezeti változó a szerelvények pontosvesszővel tagolt listája.
Csak az indítási szerelvények vannak szkennelve a HostingStartup attribútum tekintetében. A HostingStartupApp mintaalkalmazás esetében a korábban ismertetett üzemeltetési startupok felderítéséhez a környezeti változó a következő értékre van állítva:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
A hosting indítási összeállítás a Hosting Startup Assemblies host konfigurációs beállításával is beállítható.
Ha több tárhely indítási modul van jelen, a Configure metódusok végrehajtása a felsorolt sorrendben történik.
Activation
Az indítási aktiválás üzemeltetésének lehetőségei a következők:
- Futtatókörnyezeti tároló: Az aktiváláshoz nem szükséges fordítási idejű referencia. A mintaalkalmazás egy deployment mappába helyezi a hosztindító összeállítást és a függőségi fájlokat, hogy megkönnyítse a hosztindító üzembe helyezését többgépes környezetben. Az üzembehelyezési mappa tartalmaz egy PowerShell-szkriptet is, amely környezeti változókat hoz létre vagy módosít az üzembe helyezési rendszeren az üzemeltetési indítás engedélyezéséhez.
- Az aktiváláshoz szükséges fordítási idejű hivatkozás
Futtatókörnyezeti tároló
A hosting startup implementáció a runtime store-ban található. A továbbfejlesztett alkalmazás nem igényel fordítási időben történő hivatkozást az assemblyre.
A tárhelyindítás létrehozása után a rendszer létrehoz egy runtime tárat a manifeszt projektfájl és a dotnet store parancs használatával.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
A mintaalkalmazásban (RuntimeStore projekt) a következő parancsot használja:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezeti tárolót, a rendszer hozzáadja a futtatókörnyezeti tároló helyét a DOTNET_SHARED_STORE környezeti változóhoz.
A tárhely indítás függőségi fájljának módosítása és elhelyezése
Ha a fejlesztést csomaghivatkozás nélkül szeretné aktiválni, adjon meg további függőségeket a futtatókörnyezethez a következővel additionalDeps: .
additionalDeps lehetővé teszi, hogy:
- Bővítse ki az alkalmazás kódtár-gráfját úgy, hogy további
.deps.jsonfájlokat biztosít az alkalmazás saját.deps.jsonfájljával való egyesítéshez indításkor. - A hosztolási indítási összetevő felderíthetővé és betölthetővé tétele.
A további függőségi fájlok létrehozásának ajánlott módszere a következő:
- Hajtsa végre
dotnet publishaz előző szakaszban említett futtatási környezet tárolójának manifesztfájlján. - Távolítsa el a manifeszt hivatkozást a kódtárakból és az így kapott
runtimefájl.deps.jsonszakaszából.
A példaprojektben a store.manifest/1.0.0 tulajdonság el van távolítva a targets és libraries szakaszból.
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v2.1",
"signature": "4ea77c7b75ad1895ae1ea65e6ba2399010514f99"
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v2.1": {
"store.manifest/1.0.0": {
"dependencies": {
"StartupDiagnostics": "1.0.0"
},
"runtime": {
"store.manifest.dll": {}
}
},
"StartupDiagnostics/1.0.0": {
"runtime": {
"lib/netcoreapp2.1/StartupDiagnostics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"store.manifest/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StartupDiagnostics/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oiQr60vBQW7+nBTmgKLSldj06WNLRTdhOZpAdEbCuapoZ+M2DJH2uQbRLvFT8EGAAv4TAKzNtcztpx5YOgBXQQ==",
"path": "startupdiagnostics/1.0.0",
"hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
}
}
}
Helyezze a .deps.json fájlt a következő helyre:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
-
{ADDITIONAL DEPENDENCIES PATH}: A környezeti változóhozDOTNET_ADDITIONAL_DEPShozzáadott hely. -
{SHARED FRAMEWORK NAME}: Ehhez a további függőségi fájlhoz közös keretrendszer szükséges. -
{SHARED FRAMEWORK VERSION}: A megosztott keretrendszer minimális verziója. -
{ENHANCEMENT ASSEMBLY NAME}: A fejlesztés összeállításának neve.
A mintaalkalmazásban (RuntimeStore-projekt ) a további függőségi fájl a következő helyre kerül:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/2.1.0/StartupDiagnostics.deps.json
Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezet tárolójának helyét, a rendszer hozzáadja a további függőségek fájlhelyét a DOTNET_ADDITIONAL_DEPS környezeti változóhoz.
Note
A DOTNET_ADDITIONAL_DEPS környezeti változó csak keretrendszerfüggő alkalmazásokkal működik. Ezt a környezeti változót a rendszer figyelmen kívül hagyja az önálló alkalmazások esetében.
A mintaalkalmazásban (RuntimeStore-projekt ) a futtatókörnyezeti tároló létrehozása és a további függőségek fájljának létrehozása PowerShell-szkripttel történik.
A különböző operációs rendszerek környezeti változóinak beállítására vonatkozó példákért lásd: Több környezet használata.
Deployment
A többtényezős környezetben futó üzemeltetési indítás üzembe helyezésének megkönnyítése érdekében a mintaalkalmazás létrehoz egy üzembehelyezési mappát a közzétett kimenetben, amely a következőket tartalmazza:
- Az üzemeltetési futtatókörnyezet tárolója.
- Az hosztolási indítási függőségek fájlja.
- Egy PowerShell-szkript, amely létrehozza vagy módosítja a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES,DOTNET_SHARED_STORE, ésDOTNET_ADDITIONAL_DEPSannak érdekében, hogy támogassa az üzemeltetési indítás aktiválását. Futtassa a szkriptet egy rendszergazdai PowerShell-parancssorból az üzembe helyezési rendszeren.
NuGet-csomag
Egy üzemeltetési indítási fejlesztés nuGet-csomagban is elérhető. A csomagnak van egy HostingStartup attribútuma. A csomag által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:
- A továbbfejlesztett alkalmazás projektfájlja csomaghivatkozást készít az alkalmazás projektfájljában található üzemeltetési indításhoz (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (
.deps.json). Ez a megközelítés a nuget.org számára közzétett üzemeltetési indítási szerelvénycsomagra vonatkozik. - A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
A NuGet-csomagokról és a futtatókörnyezet tárolójáról az alábbi témakörökben talál további információt:
- NuGet-csomag létrehozása platformfüggetlen eszközökkel
- Közzétételi csomagok
- Futtatókörnyezeti csomagtároló
Projekttároló mappa
A hoszting startup fejlesztését a továbbfejlesztett alkalmazásban egy bin-telepített gyűjtemény biztosíthatja. A szerelvény által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:
- A továbbfejlesztett alkalmazás projektfájlja összeállítási hivatkozást készít az üzemeltetési indítási folyamatra (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (
.deps.json). Ez a megközelítés akkor alkalmazható, ha az üzembe helyezési forgatókönyv fordításidejű hivatkozást kér az üzemeltetési indítási összeállítására (.dll fájlra), és az összeállítást vagy az alábbi helyek egyikére helyezi át:- A fogyasztó projekt.
- A felhasználói projekt által elérhető helyszín.
- A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
- A .NET-keretrendszer megcélzásakor a szerelvény az alapértelmezett terhelési környezetben tölthető be, ami a .NET-keretrendszeren azt jelenti, hogy a szerelvény az alábbi helyek valamelyikén található:
- Alkalmazás alap elérési útja: Az a bin mappa, amelyben az alkalmazás végrehajtható (.exe) található.
- Globális Assembly Gyorsítótár (GAC): A GAC olyan assemblyket tárol, amelyeket több .NET-keretrendszer alkalmazás is használ. További információért lásd Hogyan: Szerelvény telepítése a globális szerelvény-gyorsítótárba a .NET-keretrendszer dokumentációjában.
példakód
A mintakód (letöltés) bemutatja az indítási megvalósítási forgatókönyvek üzemeltetését:
- Két üzemeltetési indítási szerelvény (osztálykódtár) állít be egy-egy memóriabeli konfigurációs kulcs-érték párot:
- NuGet-csomag (HostingStartupPackage)
- Osztálykönyvtár (HostingStartupLibrary)
- Egy hosztolási indulás egy tárhely-raktárba telepített szerelvényből (StartupDiagnostics) aktiválódik. A szerelvény két köztes szoftvert ad hozzá az alkalmazáshoz indításkor, amelyek diagnosztikai információkat nyújtanak a következőkkel kapcsolatban:
- Regisztrált szolgáltatások
- Cím (séma, gazdagép, útvonal alapja, elérési út, lekérdezési string)
- Kapcsolat (távoli IP-cím, távoli port, helyi IP-cím, helyi port, ügyféltanúsítvány)
- HTTP-kérés fejlécek
- Környezeti változók
A minta futtatásához:
Aktiválás NuGet-csomagból
Állítsa össze a HostingStartupPackage csomagot a dotnet pack paranccsal.
Adja hozzá a csomag HostingStartupPackage szerelvénynevét a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz.Állítsa össze és futtassa az alkalmazást. A bővített alkalmazásban egy csomag referenciája van jelen (fordítási idő hivatkozás). Az
<PropertyGroup>alkalmazás projektfájljában a csomagprojekt kimenetét (../HostingStartupPackage/bin/Debug) csomagforrásként adja meg. Ez lehetővé teszi, hogy az alkalmazás anélkül használja a csomagot, hogy feltöltené a csomagot a nuget.org. További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>Figyelje meg, hogy az Index lap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek a csomag metódusa
ServiceKeyInjection.Configureáltal beállított értékekkel.
Ha módosítja a HostingStartupPackage projektet, és újrafordít, törölje a helyi NuGet-csomag gyorsítótárait, hogy a HostingStartupApp megkapja a frissített csomagot, és ne a helyi gyorsítótárból származó elavult csomagot. A helyi NuGet-gyorsítótárak törléséhez hajtsa végre a következő dotnet nuget locals parancsot:
dotnet nuget locals all --clear
Aktiválás osztálytárból
Állítsa össze a HostingStartupLibrary osztálytárat a dotnet build parancsával.
Adja hozzá az osztálytár HostingStartupLibrary szerelvénynevét a
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz.helyezze üzembe az osztálytár szerelvényét az alkalmazásban az osztálytár lefordított kimenetéből a HostingStartupLibrary.dll fájl másolásával az alkalmazás bin/Debug mappájába.
Állítsa össze és futtassa az alkalmazást. Az
<ItemGroup>alkalmazás projektfájljában az osztálytár szerelvényére (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) hivatkozik (fordítási idő referenciája). További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>Figyelje meg, hogy az Indexlap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek az osztálytár metódusa
ServiceKeyInjection.Configureáltal beállított értékekkel.
Aktiválás futtatókörnyezetben üzembe helyezett szerelvényből
- A StartupDiagnostics projekt a PowerShell használatával módosítja a fájlját
StartupDiagnostics.deps.json. A PowerShell alapértelmezés szerint a Windows 7 SP1-től és a Windows Server 2008 R2 SP1-től kezdve telepítve van. Ha más platformokon szeretné beszerezni a PowerShellt, olvassa el a PowerShell különböző verzióinak telepítését. - Hajtsa végre a build.ps1 szkriptet a RuntimeStore mappában. A szkript:
- Létrehozza a
StartupDiagnosticscsomagot az obj\packages mappában. - Létrehozza a futtatókörnyezeti tárolót
StartupDiagnosticsaz áruház mappájában. Adotnet storeszkript parancsa awin7-x64futtatókörnyezet azonosítóját (RID) használja a Windowsra telepített hosztelési indításhoz. Amikor másik futtatókörnyezethez adja meg a üzemeltetési indítást, cserélje le a megfelelő RID-et a szkript 37. sorában. AStartupDiagnosticsfuttatási tárolót később áthelyezik a felhasználó vagy a rendszer futtatási tárolójába azon a gépen, amelyen a szerelvényt használni fogják. AStartupDiagnosticsszerelvény felhasználói futtatókörnyezeti tárolójának telepítési helye a .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll. - Létrehozza a
additionalDepsaStartupDiagnosticsszámára az additionalDeps mappában. A további függőségek később átkerülnek a felhasználó vagy a rendszer további függőségeibe. A felhasználóStartupDiagnosticstovábbi függőségeinek telepítési helye a.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json. - A deploy.ps1 fájlt a központi telepítési mappába helyezi.
- Létrehozza a
- Futtassa a deploy.ps1 szkriptet az üzembe helyezési mappában. A szkript hozzáfűzi a következőt:
-
StartupDiagnosticsaASPNETCORE_HOSTINGSTARTUPASSEMBLIESkörnyezeti változóhoz. - Az indítási függőségek útvonalát (a RuntimeStore projekt üzembehelyezési mappájában) a
DOTNET_ADDITIONAL_DEPSkörnyezeti változóhoz kell megadni. - A futtatókörnyezet-tároló elérési útja (a RuntimeStore projekt üzembehelyezési mappájában) a
DOTNET_SHARED_STOREkörnyezeti változóhoz.
-
- Futtassa a mintaalkalmazást.
- Kérje meg a
/servicesvégpontot az alkalmazás regisztrált szolgáltatásainak megtekintéséhez. Kérje meg a/diagvégpontot a diagnosztikai információk megtekintéséhez.