Použití hostování spouštěcích sestavení v ASP.NET Core
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete v tomto článku ve verzi .NET 9.
Autor: Pavel Krymets
Implementace IHostingStartup (hostování spuštění) přidává vylepšení aplikace při spuštění z externího sestavení. Externí knihovna může například k poskytování dalších poskytovatelů konfigurace nebo služeb aplikaci použít implementaci hostování při spuštění.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Atribut HostingStartup
Atribut HostingStartup označuje přítomnost hostitelského spouštěcího sestavení pro aktivaci za běhu.
Vstupní sestavení nebo sestavení obsahující Startup
třídu se automaticky vyhledá atribut HostingStartup
. Seznam sestavení pro vyhledávání HostingStartup
atributů se načte za běhu z konfigurace webHostDefaults.HostingStartupAssembliesKey. Seznam sestavení, která se mají vyloučit ze zjišťování, se načte z WebHostDefaults.HostingStartupExcludeAssembliesKey.
V následujícím příkladu je obor názvů hostitelského spouštěcího sestavení StartupEnhancement
. Třída obsahující hostitelský spouštěcí kód je StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Atribut HostingStartup
se obvykle nachází v souboru třídy implementace spouštěcího IHostingStartup
sestavení hostujícího.
Zjištění načtených spouštěcích sestavení hostování
Pokud chcete zjistit načtená spouštěcí sestavení hostování, povolte protokolování a zkontrolujte protokoly aplikace. Zaprotokolují se chyby, ke kterým dochází při načítání sestavení. Načtená spouštěcí sestavení hostujícího hostování se protokolují na úrovni ladění a protokolují se všechny chyby.
Zakázání automatického načítání hostování spouštěcích sestavení
Pokud chcete zakázat automatické načítání spouštěcích sestavení hostování, použijte jeden z následujících přístupů:
Chcete-li zabránit načtení všech spouštěcích sestavení hostování, nastavte jednu z následujících možností:
true
1
Zabránit nastavení konfigurace hostitele hostování po spuštění:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.PreventHostingStartupKey, "true") .UseStartup<Startup>(); });
ASPNETCORE_PREVENTHOSTINGSTARTUP
proměnná prostředí.
Chcete-li zabránit načtení konkrétních spouštěcích sestavení hostování, nastavte jeden z následujících na středník oddělený řetězec hostování spouštěcích sestavení, která se mají vyloučit při spuštění:
Hostování nastavení konfigurace hostitelů vyloučení sestavení při spuštění:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.HostingStartupExcludeAssembliesKey, "{ASSEMBLY1;ASSEMBLY2; ...}") .UseStartup<Startup>(); });
Zástupný
{ASSEMBLY1;ASSEMBLY2; ...}
symbol představuje seznam sestavení oddělených středníkem.ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
proměnná prostředí.
Pokud je nastavené nastavení konfigurace hostitele i proměnná prostředí, řídí nastavení hostitele chování.
Zakázání hostování spouštěcích sestavení pomocí nastavení hostitele nebo proměnné prostředí zakáže sestavení globálně a může zakázat několik charakteristik aplikace.
Projekt
Vytvořte spuštění hostování s některým z následujících typů projektů:
Knihovna tříd
Rozšíření spouštění hostingu lze poskytnout v knihovně tříd. Knihovna obsahuje HostingStartup
atribut.
Ukázkový kód zahrnuje Razor aplikaci Pages, HostingStartupApp a knihovnu tříd HostingStartupLibrary. Knihovna tříd:
- Obsahuje hostující spouštěcí třídu,
ServiceKeyInjection
která implementujeIHostingStartup
.ServiceKeyInjection
přidá do konfigurace aplikace dvojici řetězců služby pomocí zprostředkovatele konfigurace v paměti (AddInMemoryCollection). HostingStartup
Obsahuje atribut, který identifikuje obor názvů a třídu hostujícího startupu.
Metoda ServiceKeyInjection
třídy Configure používá IWebHostBuilder k přidání vylepšení do aplikace.
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);
});
}
}
}
Indexová stránka aplikace načte a vykreslí konfigurační hodnoty pro dva klíče nastavené hostitelským spouštěcím sestavením knihovny tříd:
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()
{
}
}
Ukázkový kód obsahuje také projekt balíčku NuGet, který poskytuje samostatné hostování spuštění HostingStartupPackage. Balíček má stejné vlastnosti jako knihovna tříd popsaná výše. Balíček:
- Obsahuje hostující spouštěcí třídu,
ServiceKeyInjection
která implementujeIHostingStartup
.ServiceKeyInjection
přidá do konfigurace aplikace dvojici řetězců služby. HostingStartup
Zahrnuje atribut.
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);
});
}
}
}
Indexová stránka aplikace přečte a vykreslí konfigurační hodnoty pro dva klíče nastavené spouštěcím sestavením balíčku, který hostuje:
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()
{
}
}
Konzolová aplikace bez vstupního bodu
Tento přístup je k dispozici pouze pro aplikace .NET Core, nikoli pro .NET Framework.
Vylepšení dynamického hostování spouštění, které nevyžaduje referenční informace o době kompilace pro aktivaci, je možné poskytnout v konzolové aplikaci bez vstupního HostingStartup
bodu, který obsahuje atribut. Publikování konzolové aplikace vytvoří hostitelské spouštěcí sestavení, které lze využívat z úložiště runtime.
Konzolová aplikace bez vstupního bodu se v tomto procesu používá, protože:
- Soubor závislostí je nutný ke zpracování spuštění hostování v hostitelském spouštěcím sestavení. Soubor závislostí je spustitelný prostředek aplikace vytvořený publikováním aplikace, nikoli knihovny.
- Knihovnu nelze přidat přímo do úložiště balíčků modulu runtime, který vyžaduje spustitelný projekt, který cílí na sdílený modul runtime.
Při vytváření dynamického hostování spuštění:
- Hostitelské spouštěcí sestavení se vytvoří z konzolové aplikace bez vstupního bodu, který:
- Obsahuje třídu, která obsahuje implementaci
IHostingStartup
. - Obsahuje atribut HostingStartup pro identifikaci
IHostingStartup
třídy implementace.
- Obsahuje třídu, která obsahuje implementaci
- Konzolová aplikace se publikuje, aby získala závislosti spuštění hostitele. Důsledkem publikování konzolové aplikace je, že se nepoužívané závislosti ze souboru závislostí oříznou.
- Soubor závislostí je upraven tak, aby nastavil umístění modulu runtime hostujícího spouštěcího sestavení.
- Hostitelské spouštěcí sestavení a jeho soubor závislostí se umístí do úložiště balíčků modulu runtime. Pokud chcete zjistit hostující spouštěcí sestavení a jeho soubor závislostí, jsou uvedené v páru proměnných prostředí.
Konzolová aplikace odkazuje na balíček Microsoft.AspNetCore.Hosting.Abstractions :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="3.0.0" />
</ItemGroup>
</Project>
Atribut HostingStartup identifikuje třídu jako implementaci IHostingStartup
pro načítání a spouštění při sestavování IWebHost. V následujícím příkladu je StartupEnhancement
obor názvů a třída je StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Třída implementuje IHostingStartup
. Metoda třídy Configure používá IWebHostBuilder k přidání vylepšení do aplikace. IHostingStartup.Configure
v hostitelské spouštěcí sestavení je volána modulem runtime před Startup.Configure
uživatelským kódem, což umožňuje uživatelskému kódu přepsat jakoukoli konfiguraci poskytnutou hostitelským spouštěcím sestavením.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Při sestavování IHostingStartup
projektu nastaví runtime
soubor závislostí (.deps.json
) umístění sestavení do složky bin:
"targets": {
".NETCoreApp,Version=v3.0": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "3.0.0"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
Zobrazí se jenom část souboru. Název sestavení v příkladu je StartupEnhancement
.
Konfigurace poskytovaná spuštěním hostování
Existují dva přístupy ke zpracování konfigurace v závislosti na tom, jestli má mít konfigurace hostujícího spuštění přednost, nebo jestli má mít přednost konfigurace aplikace:
- Zadejte konfiguraci aplikace, pomocí ConfigureAppConfiguration které se načte konfigurace po spuštění delegátů aplikace ConfigureAppConfiguration . Hostování konfigurace spouštění má přednost před konfigurací aplikace pomocí tohoto přístupu.
- Zadejte konfiguraci aplikace, pomocí UseConfiguration které se načte konfigurace před spuštěním delegátů aplikace ConfigureAppConfiguration . Hodnoty konfigurace aplikace mají přednost před hodnotami, které poskytuje spuštění hostingu pomocí tohoto přístupu.
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);
}
}
Určení hostujícího spouštěcího sestavení
Pro spuštění hostujícího hostování knihovny tříd nebo konzolové aplikace zadejte název hostitelského spouštěcího sestavení v ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
proměnné prostředí. Proměnná prostředí je seznam sestavení oddělených středníkem.
Pro HostingStartup
atribut se prohledávají pouze hostující spouštěcí sestavení. Pro ukázkovou aplikaci HostingStartupApp, aby bylo potřeba zjistit dříve popsané spouštění hostingu, je proměnná prostředí nastavená na následující hodnotu:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
Hostitelské spouštěcí sestavení lze také nastavit pomocí nastavení konfigurace hostitele Host hostování spouštěcích sestavení:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey,
"{ASSEMBLY1;ASSEMBLY2; ...}")
.UseStartup<Startup>();
});
Zástupný {ASSEMBLY1;ASSEMBLY2; ...}
symbol představuje seznam sestavení oddělených středníkem.
Pokud je k dispozici více sestavení spuštění hostování, jejich Configure metody se spustí v pořadí, v jakém jsou uvedena sestavení.
Aktivace
Možnosti hostování aktivace po spuštění jsou:
- Úložiště runtime: Aktivace nevyžaduje pro aktivaci referenční informace o čase kompilace. Ukázková aplikace umístí hostující spouštěcí sestavení a soubory závislostí do složky, nasazení, aby usnadnila nasazení hostitelského spuštění v prostředí s více počítači. Složka nasazení obsahuje také skript PowerShellu, který vytvoří nebo upraví proměnné prostředí v systému nasazení, aby bylo možné spustit hostování.
- Referenční informace o čase kompilace vyžadované pro aktivaci
Úložiště runtime
Implementace hostování spuštění se umístí do úložiště modulu runtime. Rozšířená aplikace nevyžaduje odkaz na sestavení v době kompilace.
Po sestavení spuštění hostování se pomocí souboru projektu manifestu a příkazu dotnet store vygeneruje úložiště modulu runtime.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
V ukázkové aplikaci (projekt RuntimeStore ) se používá následující příkaz:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Aby modul runtime zjistil úložiště modulu runtime, přidá DOTNET_SHARED_STORE
se do proměnné prostředí umístění úložiště modulu runtime.
Úprava a umístění souboru závislostí hostujícího spuštění
Chcete-li aktivovat vylepšení bez odkazu na balíček na vylepšení, zadejte další závislosti modulu runtime pomocí additionalDeps
. additionalDeps
umožňuje:
- Rozšiřte graf knihovny aplikace tím, že při spuštění poskytnete sadu dalších
.deps.json
souborů pro sloučení s vlastním.deps.json
souborem aplikace. - Nastavit hostování spouštěcího sestavení zjistitelný a načístelný.
Doporučeným přístupem pro generování dalšího souboru závislostí je:
- Spusťte
dotnet publish
soubor manifestu úložiště modulu runtime odkazovaný v předchozí části. - Odeberte odkaz na manifest z knihoven a
runtime
oddíl výsledného.deps.json
souboru.
V ukázkovém projektu store.manifest/1.0.0
se vlastnost odebere z oddílu a libraries
oddílutargets
:
{
"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"
}
}
}
.deps.json
Soubor umístěte do následujícího umístění:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
{ADDITIONAL DEPENDENCIES PATH}
: Umístění přidáno doDOTNET_ADDITIONAL_DEPS
proměnné prostředí.{SHARED FRAMEWORK NAME}
: Sdílená architektura požadovaná pro tento další soubor závislostí.{SHARED FRAMEWORK VERSION}
: Minimální verze sdíleného rozhraní.{ENHANCEMENT ASSEMBLY NAME}
: Název sestavení vylepšení.
V ukázkové aplikaci (projekt RuntimeStore ) se další soubor závislostí umístí do následujícího umístění:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/3.0.0/StartupDiagnostics.deps.json
Aby modul runtime zjistil umístění úložiště modulu runtime, přidá se do DOTNET_ADDITIONAL_DEPS
proměnné prostředí další umístění souboru závislostí.
V ukázkové aplikaci (projekt RuntimeStore) se sestavení úložiště modulu runtime a vygenerování dalšího souboru závislostí provádí pomocí skriptu PowerShellu.
Příklady nastavení proměnných prostředí pro různé operační systémy najdete v tématu Použití více prostředí.
Nasazení
Aby se usnadnilo nasazení hostujícího spuštění v prostředí s více počítači, ukázková aplikace vytvoří složku nasazení v publikovaném výstupu, který obsahuje:
- Hostování spouštěcího úložiště modulu runtime.
- Soubor hostování spouštěcích závislostí.
- Skript PowerShellu
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
, který vytvoří nebo upraví ,DOTNET_SHARED_STORE
aDOTNET_ADDITIONAL_DEPS
podporuje aktivaci spuštění hostování. Spusťte skript z příkazového řádku PowerShellu pro správu v systému nasazení.
Balíček NuGet
Vylepšení hostování spuštění je možné poskytnout v balíčku NuGet. Balíček má HostingStartup
atribut. Typy spouštění hostování poskytované balíčkem jsou k dispozici pro aplikaci pomocí některého z následujících přístupů:
- Soubor projektu rozšířené aplikace vytvoří odkaz na balíček pro hostování spuštění v souboru projektu aplikace (odkaz na kompilaci). Při použití odkazu na čas kompilace se hostitelské spouštěcí sestavení a všechny jeho závislosti začlení do souboru závislostí aplikace (
.deps.json
). Tento přístup platí pro hostování spouštěcího balíčku sestavení publikovaného do nuget.org. - Soubor závislostí hostujícího spuštění je zpřístupněn rozšířené aplikaci, jak je popsáno v části Úložiště runtime (bez odkazu na kompilaci).
Další informace o balíčcích NuGet a úložišti runtime najdete v následujících tématech:
- Vytvoření balíčku NuGet pomocí nástrojů pro různé platformy
- Balíčky publikování
- Úložiště balíčků modulu runtime
Složka přihrádky projektu
Rozšíření spuštění hostování může poskytnout sestavení nasazené přihrádky v rozšířené aplikaci. Typy spouštění hostování poskytované sestavením jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:
- Soubor projektu rozšířené aplikace odkazuje na sestavení hostujícího spuštění (referenční informace o čase kompilace). Při použití odkazu na čas kompilace se hostitelské spouštěcí sestavení a všechny jeho závislosti začlení do souboru závislostí aplikace (
.deps.json
). Tento přístup platí v případě, že scénář nasazení volá odkaz na kompilaci na sestavení hostujícího spuštění (soubor .dll ) a přesun sestavení do:- Projekt využívající.
- Umístění přístupné z projektu využívajícího.
- Soubor závislostí hostujícího spuštění je zpřístupněn rozšířené aplikaci, jak je popsáno v části Úložiště runtime (bez odkazu na kompilaci).
- Při cílení na rozhraní .NET Framework je sestavení možné načíst ve výchozím kontextu zatížení, což v rozhraní .NET Framework znamená, že sestavení se nachází v některém z následujících umístění:
- Základní cesta aplikace: Složka bin , ve které se nachází spustitelný soubor aplikace (.exe).
- Globální mezipaměť sestavení (GAC): GAC ukládá sestavení, která sdílí několik aplikací rozhraní .NET Framework. Další informace naleznete v tématu Postupy: Instalace sestavení do globální mezipaměti sestavení v dokumentaci rozhraní .NET Framework.
Ukázkový kód
Ukázkový kód (jak stáhnout) ukazuje hostování scénářů implementace spuštění:
- Dvě hostující spouštěcí sestavení (knihovny tříd) nastaví dvojici párů klíč-hodnota konfigurace v paměti:
- Balíček NuGet (HostingStartupPackage)
- Knihovna tříd (HostingStartupLibrary)
- Spuštění hostování se aktivuje z sestavení nasazeného v úložišti runtime (StartupDiagnostics). Sestavení přidá do aplikace při spuštění dva middlewary, které poskytují diagnostické informace o:
- Registrované služby
- Adresa (schéma, hostitel, základ cesty, cesta, řetězec dotazu)
- Připojení (vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát)
- Záhlaví žádosti
- Proměnné prostředí
Spuštění ukázky:
Aktivace z balíčku NuGet
Zkompilujte balíček HostingStartupPackage pomocí příkazu dotnet pack.
Do proměnné prostředí přidejte název sestavení balíčku HostingStartupPackage
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
.Zkompilujte a spusťte aplikaci. Odkaz na balíček se nachází v rozšířené aplikaci (referenční informace o čase kompilace). A
<PropertyGroup>
v souboru projektu aplikace určuje výstup projektu balíčku (.. /HostingStartupPackage/bin/Debug) jako zdroj balíčku. Aplikace tak může balíček používat bez nahrání balíčku do nuget.org. Další informace najdete v poznámkách v souboru projektu HostingStartupApp.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
Všimněte si, že hodnoty konfiguračního klíče služby vykreslené indexovou stránkou odpovídají hodnotám nastaveným metodou balíčku
ServiceKeyInjection.Configure
.
Pokud provedete změny projektu HostingStartupPackage a znovu ho zkompilujete, vymažte místní mezipaměti balíčků NuGet, abyste zajistili, že HostingStartupApp obdrží aktualizovaný balíček, a ne zastaralý balíček z místní mezipaměti. Pokud chcete vymazat místní mezipaměti NuGet, spusťte následující příkaz dotnet nuget locals :
dotnet nuget locals all --clear
Aktivace z knihovny tříd
Zkompilujte knihovnu tříd HostingStartupLibrary pomocí příkazu dotnet build.
Přidejte název sestavení knihovny tříd HostingStartupLibrary do
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
proměnné prostředí.Bin-deploy the class library's assembly to the app by copying the HostingStartupLibrary.dll file from the class library's compiled output to the app's bin/Debug folder.
Zkompilujte a spusťte aplikaci. Soubor
<ItemGroup>
projektu aplikace odkazuje na sestavení knihovny tříd (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) (odkaz na kompilaci). Další informace najdete v poznámkách v souboru projektu HostingStartupApp.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
Všimněte si, že hodnoty konfiguračního klíče služby vykreslené indexovou stránkou odpovídají hodnotám nastaveným metodou knihovny
ServiceKeyInjection.Configure
tříd.
Aktivace ze sestavení nasazeného v úložišti modulu runtime
- Projekt StartupDiagnostics používá k úpravě souboru
StartupDiagnostics.deps.json
PowerShell. PowerShell je ve výchozím nastavení nainstalovaný ve Windows počínaje Windows 7 SP1 a Windows Serverem 2008 R2 SP1. Informace o získání PowerShellu na jiných platformách najdete v tématu Instalace různých verzí PowerShellu. - Spusťte skript build.ps1 ve složce RuntimeStore. Skript:
- Vygeneruje
StartupDiagnostics
balíček ve složce obj\packages . - Vygeneruje úložiště runtime pro
StartupDiagnostics
složku úložiště . Příkazdotnet store
ve skriptu používáwin7-x64
identifikátor modulu runtime (RID) pro hostování při spuštění nasazeného ve Windows. Při poskytování hostování spuštění pro jiný modul runtime nahraďte správným identifikátorem RID na řádku 37 skriptu. Úložiště runtime proStartupDiagnostics
později se přesune do úložiště modulu runtime uživatele nebo systému na počítači, kde bude sestavení spotřebováno. Umístění instalace úložiště modulu runtime uživatele proStartupDiagnostics
sestavení je .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll. - Vygeneruje
additionalDeps
forStartupDiagnostics
ve složce additionalDeps . Další závislosti se později přesunou do dalších závislostí uživatele nebo systému. Umístění instalace dalších závislostí uživateleStartupDiagnostics
je.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json
. - Umístí soubor deploy.ps1 do složky nasazení.
- Vygeneruje
- Spusťte skript deploy.ps1 ve složce nasazení. Skript připojí:
StartupDiagnostics
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
do proměnné prostředí.- Cesta k hostování spouštěcích závislostí (ve složce nasazení projektu RuntimeStore) do
DOTNET_ADDITIONAL_DEPS
proměnné prostředí. - Cesta k úložišti modulu runtime (ve složce nasazení projektu RuntimeStore) do
DOTNET_SHARED_STORE
proměnné prostředí.
- Spusťte ukázkovou aplikaci.
/services
Požádejte koncový bod, aby se zobrazily registrované služby aplikace./diag
Požádejte koncový bod o zobrazení diagnostických informací.
Implementace IHostingStartup (hostování spuštění) přidává vylepšení aplikace při spuštění z externího sestavení. Externí knihovna může například k poskytování dalších poskytovatelů konfigurace nebo služeb aplikaci použít implementaci hostování při spuštění.
Zobrazení nebo stažení ukázkového kódu (postup stažení)
Atribut HostingStartup
Atribut HostingStartup označuje přítomnost hostitelského spouštěcího sestavení pro aktivaci za běhu.
Vstupní sestavení nebo sestavení obsahující Startup
třídu se automaticky vyhledá atribut HostingStartup
. Seznam sestavení pro vyhledávání HostingStartup
atributů se načte za běhu z konfigurace webHostDefaults.HostingStartupAssembliesKey. Seznam sestavení, která se mají vyloučit ze zjišťování, se načte z WebHostDefaults.HostingStartupExcludeAssembliesKey. Další informace naleznete v tématu Webový hostitel: Hostování spouštěcích sestavení a webového hostitele: Hostování spouštěcích vyloučení sestavení.
V následujícím příkladu je obor názvů hostitelského spouštěcího sestavení StartupEnhancement
. Třída obsahující hostitelský spouštěcí kód je StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Atribut HostingStartup
se obvykle nachází v souboru třídy implementace spouštěcího IHostingStartup
sestavení hostujícího.
Zjištění načtených spouštěcích sestavení hostování
Pokud chcete zjistit načtená spouštěcí sestavení hostování, povolte protokolování a zkontrolujte protokoly aplikace. Zaprotokolují se chyby, ke kterým dochází při načítání sestavení. Načtená spouštěcí sestavení hostujícího hostování se protokolují na úrovni ladění a protokolují se všechny chyby.
Zakázání automatického načítání hostování spouštěcích sestavení
Pokud chcete zakázat automatické načítání spouštěcích sestavení hostování, použijte jeden z následujících přístupů:
- Chcete-li zabránit načtení všech spouštěcích sestavení hostování, nastavte jednu z následujících možností:
true
1
- Zabránit hostování nastavení konfigurace hostitele po spuštění
ASPNETCORE_PREVENTHOSTINGSTARTUP
proměnná prostředí.
- Chcete-li zabránit načtení konkrétních spouštěcích sestavení hostování, nastavte jeden z následujících na středník oddělený řetězec hostování spouštěcích sestavení, která se mají vyloučit při spuštění:
- Hostování nastavení konfigurace hostitelů vyloučení sestavení při spuštění
ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
proměnná prostředí.
Pokud je nastavené nastavení konfigurace hostitele i proměnná prostředí, řídí nastavení hostitele chování.
Zakázání hostování spouštěcích sestavení pomocí nastavení hostitele nebo proměnné prostředí zakáže sestavení globálně a může zakázat několik charakteristik aplikace.
Projekt
Vytvořte spuštění hostování s některým z následujících typů projektů:
Knihovna tříd
Rozšíření spouštění hostingu lze poskytnout v knihovně tříd. Knihovna obsahuje HostingStartup
atribut.
Ukázkový kód zahrnuje Razor aplikaci Pages, HostingStartupApp a knihovnu tříd HostingStartupLibrary. Knihovna tříd:
- Obsahuje hostující spouštěcí třídu,
ServiceKeyInjection
která implementujeIHostingStartup
.ServiceKeyInjection
přidá do konfigurace aplikace dvojici řetězců služby pomocí zprostředkovatele konfigurace v paměti (AddInMemoryCollection). HostingStartup
Obsahuje atribut, který identifikuje obor názvů a třídu hostujícího startupu.
Metoda ServiceKeyInjection
třídy Configure používá IWebHostBuilder k přidání vylepšení do aplikace.
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);
});
}
}
}
Indexová stránka aplikace načte a vykreslí konfigurační hodnoty pro dva klíče nastavené hostitelským spouštěcím sestavením knihovny tříd:
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()
{
}
}
Ukázkový kód obsahuje také projekt balíčku NuGet, který poskytuje samostatné hostování spuštění HostingStartupPackage. Balíček má stejné vlastnosti jako knihovna tříd popsaná výše. Balíček:
- Obsahuje hostující spouštěcí třídu,
ServiceKeyInjection
která implementujeIHostingStartup
.ServiceKeyInjection
přidá do konfigurace aplikace dvojici řetězců služby. HostingStartup
Zahrnuje atribut.
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);
});
}
}
}
Indexová stránka aplikace přečte a vykreslí konfigurační hodnoty pro dva klíče nastavené spouštěcím sestavením balíčku, který hostuje:
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()
{
}
}
Konzolová aplikace bez vstupního bodu
Tento přístup je k dispozici pouze pro aplikace .NET Core, nikoli pro .NET Framework.
Vylepšení dynamického hostování spouštění, které nevyžaduje referenční informace o době kompilace pro aktivaci, je možné poskytnout v konzolové aplikaci bez vstupního HostingStartup
bodu, který obsahuje atribut. Publikování konzolové aplikace vytvoří hostitelské spouštěcí sestavení, které lze využívat z úložiště runtime.
Konzolová aplikace bez vstupního bodu se v tomto procesu používá, protože:
- Soubor závislostí je nutný ke zpracování spuštění hostování v hostitelském spouštěcím sestavení. Soubor závislostí je spustitelný prostředek aplikace vytvořený publikováním aplikace, nikoli knihovny.
- Knihovnu nelze přidat přímo do úložiště balíčků modulu runtime, který vyžaduje spustitelný projekt, který cílí na sdílený modul runtime.
Při vytváření dynamického hostování spuštění:
- Hostitelské spouštěcí sestavení se vytvoří z konzolové aplikace bez vstupního bodu, který:
- Obsahuje třídu, která obsahuje implementaci
IHostingStartup
. - Obsahuje atribut HostingStartup pro identifikaci
IHostingStartup
třídy implementace.
- Obsahuje třídu, která obsahuje implementaci
- Konzolová aplikace se publikuje, aby získala závislosti spuštění hostitele. Důsledkem publikování konzolové aplikace je, že se nepoužívané závislosti ze souboru závislostí oříznou.
- Soubor závislostí je upraven tak, aby nastavil umístění modulu runtime hostujícího spouštěcího sestavení.
- Hostitelské spouštěcí sestavení a jeho soubor závislostí se umístí do úložiště balíčků modulu runtime. Pokud chcete zjistit hostující spouštěcí sestavení a jeho soubor závislostí, jsou uvedené v páru proměnných prostředí.
Konzolová aplikace odkazuje na balíček Microsoft.AspNetCore.Hosting.Abstractions :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="2.1.1" />
</ItemGroup>
</Project>
Atribut HostingStartup identifikuje třídu jako implementaci IHostingStartup
pro načítání a spouštění při sestavování IWebHost. V následujícím příkladu je StartupEnhancement
obor názvů a třída je StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Třída implementuje IHostingStartup
. Metoda třídy Configure používá IWebHostBuilder k přidání vylepšení do aplikace. IHostingStartup.Configure
v hostitelské spouštěcí sestavení je volána modulem runtime před Startup.Configure
uživatelským kódem, což umožňuje uživatelskému kódu přepsat jakoukoli konfiguraci poskytnutou hostitelským spouštěcím sestavením.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Při sestavování IHostingStartup
projektu nastaví runtime
soubor závislostí (.deps.json
) umístění sestavení do složky bin:
"targets": {
".NETCoreApp,Version=v2.1": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
Zobrazí se jenom část souboru. Název sestavení v příkladu je StartupEnhancement
.
Konfigurace poskytovaná spuštěním hostování
Existují dva přístupy ke zpracování konfigurace v závislosti na tom, jestli má mít konfigurace hostujícího spuštění přednost, nebo jestli má mít přednost konfigurace aplikace:
- Zadejte konfiguraci aplikace, pomocí ConfigureAppConfiguration které se načte konfigurace po spuštění delegátů aplikace ConfigureAppConfiguration . Hostování konfigurace spouštění má přednost před konfigurací aplikace pomocí tohoto přístupu.
- Zadejte konfiguraci aplikace, pomocí UseConfiguration které se načte konfigurace před spuštěním delegátů aplikace ConfigureAppConfiguration . Hodnoty konfigurace aplikace mají přednost před hodnotami, které poskytuje spuštění hostingu pomocí tohoto přístupu.
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);
}
}
Určení hostujícího spouštěcího sestavení
Pro spuštění hostujícího hostování knihovny tříd nebo konzolové aplikace zadejte název hostitelského spouštěcího sestavení v ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
proměnné prostředí. Proměnná prostředí je seznam sestavení oddělených středníkem.
Pro HostingStartup
atribut se prohledávají pouze hostující spouštěcí sestavení. Pro ukázkovou aplikaci HostingStartupApp, aby bylo potřeba zjistit dříve popsané spouštění hostingu, je proměnná prostředí nastavená na následující hodnotu:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
Hostování spouštěcího sestavení lze také nastavit pomocí nastavení konfigurace hostitele Host hostování spouštěcích sestavení.
Pokud je k dispozici více sestavení spuštění hostování, jejich Configure metody se spustí v pořadí, v jakém jsou uvedena sestavení.
Aktivace
Možnosti hostování aktivace po spuštění jsou:
- Úložiště runtime: Aktivace nevyžaduje pro aktivaci referenční informace o čase kompilace. Ukázková aplikace umístí hostující spouštěcí sestavení a soubory závislostí do složky, nasazení, aby usnadnila nasazení hostitelského spuštění v prostředí s více počítači. Složka nasazení obsahuje také skript PowerShellu, který vytvoří nebo upraví proměnné prostředí v systému nasazení, aby bylo možné spustit hostování.
- Referenční informace o čase kompilace vyžadované pro aktivaci
Úložiště runtime
Implementace hostování spuštění se umístí do úložiště modulu runtime. Rozšířená aplikace nevyžaduje odkaz na sestavení v době kompilace.
Po sestavení spuštění hostování se pomocí souboru projektu manifestu a příkazu dotnet store vygeneruje úložiště modulu runtime.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
V ukázkové aplikaci (projekt RuntimeStore ) se používá následující příkaz:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Aby modul runtime zjistil úložiště modulu runtime, přidá DOTNET_SHARED_STORE
se do proměnné prostředí umístění úložiště modulu runtime.
Úprava a umístění souboru závislostí hostujícího spuštění
Chcete-li aktivovat vylepšení bez odkazu na balíček na vylepšení, zadejte další závislosti modulu runtime pomocí additionalDeps
. additionalDeps
umožňuje:
- Rozšiřte graf knihovny aplikace tím, že při spuštění poskytnete sadu dalších
.deps.json
souborů pro sloučení s vlastním.deps.json
souborem aplikace. - Nastavit hostování spouštěcího sestavení zjistitelný a načístelný.
Doporučeným přístupem pro generování dalšího souboru závislostí je:
- Spusťte
dotnet publish
soubor manifestu úložiště modulu runtime odkazovaný v předchozí části. - Odeberte odkaz na manifest z knihoven a
runtime
oddíl výsledného.deps.json
souboru.
V ukázkovém projektu store.manifest/1.0.0
se vlastnost odebere z oddílu a libraries
oddílutargets
:
{
"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"
}
}
}
.deps.json
Soubor umístěte do následujícího umístění:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
{ADDITIONAL DEPENDENCIES PATH}
: Umístění přidáno doDOTNET_ADDITIONAL_DEPS
proměnné prostředí.{SHARED FRAMEWORK NAME}
: Sdílená architektura požadovaná pro tento další soubor závislostí.{SHARED FRAMEWORK VERSION}
: Minimální verze sdíleného rozhraní.{ENHANCEMENT ASSEMBLY NAME}
: Název sestavení vylepšení.
V ukázkové aplikaci (projekt RuntimeStore ) se další soubor závislostí umístí do následujícího umístění:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/2.1.0/StartupDiagnostics.deps.json
Aby modul runtime zjistil umístění úložiště modulu runtime, přidá se do DOTNET_ADDITIONAL_DEPS
proměnné prostředí další umístění souboru závislostí.
V ukázkové aplikaci (projekt RuntimeStore) se sestavení úložiště modulu runtime a vygenerování dalšího souboru závislostí provádí pomocí skriptu PowerShellu.
Příklady nastavení proměnných prostředí pro různé operační systémy najdete v tématu Použití více prostředí.
Nasazení
Aby se usnadnilo nasazení hostujícího spuštění v prostředí s více počítači, ukázková aplikace vytvoří složku nasazení v publikovaném výstupu, který obsahuje:
- Hostování spouštěcího úložiště modulu runtime.
- Soubor hostování spouštěcích závislostí.
- Skript PowerShellu
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
, který vytvoří nebo upraví ,DOTNET_SHARED_STORE
aDOTNET_ADDITIONAL_DEPS
podporuje aktivaci spuštění hostování. Spusťte skript z příkazového řádku PowerShellu pro správu v systému nasazení.
Balíček NuGet
Vylepšení hostování spuštění je možné poskytnout v balíčku NuGet. Balíček má HostingStartup
atribut. Typy spouštění hostování poskytované balíčkem jsou k dispozici pro aplikaci pomocí některého z následujících přístupů:
- Soubor projektu rozšířené aplikace vytvoří odkaz na balíček pro hostování spuštění v souboru projektu aplikace (odkaz na kompilaci). Při použití odkazu na čas kompilace se hostitelské spouštěcí sestavení a všechny jeho závislosti začlení do souboru závislostí aplikace (
.deps.json
). Tento přístup platí pro hostování spouštěcího balíčku sestavení publikovaného do nuget.org. - Soubor závislostí hostujícího spuštění je zpřístupněn rozšířené aplikaci, jak je popsáno v části Úložiště runtime (bez odkazu na kompilaci).
Další informace o balíčcích NuGet a úložišti runtime najdete v následujících tématech:
- Vytvoření balíčku NuGet pomocí nástrojů pro různé platformy
- Balíčky publikování
- Úložiště balíčků modulu runtime
Složka přihrádky projektu
Rozšíření spuštění hostování může poskytnout sestavení nasazené přihrádky v rozšířené aplikaci. Typy spouštění hostování poskytované sestavením jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:
- Soubor projektu rozšířené aplikace odkazuje na sestavení hostujícího spuštění (referenční informace o čase kompilace). Při použití odkazu na čas kompilace se hostitelské spouštěcí sestavení a všechny jeho závislosti začlení do souboru závislostí aplikace (
.deps.json
). Tento přístup platí v případě, že scénář nasazení volá odkaz na kompilaci na sestavení hostujícího spuštění (soubor .dll ) a přesun sestavení do:- Projekt využívající.
- Umístění přístupné z projektu využívajícího.
- Soubor závislostí hostujícího spuštění je zpřístupněn rozšířené aplikaci, jak je popsáno v části Úložiště runtime (bez odkazu na kompilaci).
- Při cílení na rozhraní .NET Framework je sestavení možné načíst ve výchozím kontextu zatížení, což v rozhraní .NET Framework znamená, že sestavení se nachází v některém z následujících umístění:
- Základní cesta aplikace: Složka bin , ve které se nachází spustitelný soubor aplikace (.exe).
- Globální mezipaměť sestavení (GAC): GAC ukládá sestavení, která sdílí několik aplikací rozhraní .NET Framework. Další informace naleznete v tématu Postupy: Instalace sestavení do globální mezipaměti sestavení v dokumentaci rozhraní .NET Framework.
Ukázkový kód
Ukázkový kód (jak stáhnout) ukazuje hostování scénářů implementace spuštění:
- Dvě hostující spouštěcí sestavení (knihovny tříd) nastaví dvojici párů klíč-hodnota konfigurace v paměti:
- Balíček NuGet (HostingStartupPackage)
- Knihovna tříd (HostingStartupLibrary)
- Spuštění hostování se aktivuje z sestavení nasazeného v úložišti runtime (StartupDiagnostics). Sestavení přidá do aplikace při spuštění dva middlewary, které poskytují diagnostické informace o:
- Registrované služby
- Adresa (schéma, hostitel, základ cesty, cesta, řetězec dotazu)
- Připojení (vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát)
- Záhlaví žádosti
- Proměnné prostředí
Spuštění ukázky:
Aktivace z balíčku NuGet
Zkompilujte balíček HostingStartupPackage pomocí příkazu dotnet pack.
Do proměnné prostředí přidejte název sestavení balíčku HostingStartupPackage
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
.Zkompilujte a spusťte aplikaci. Odkaz na balíček se nachází v rozšířené aplikaci (referenční informace o čase kompilace). A
<PropertyGroup>
v souboru projektu aplikace určuje výstup projektu balíčku (.. /HostingStartupPackage/bin/Debug) jako zdroj balíčku. Aplikace tak může balíček používat bez nahrání balíčku do nuget.org. Další informace najdete v poznámkách v souboru projektu HostingStartupApp.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
Všimněte si, že hodnoty konfiguračního klíče služby vykreslené indexovou stránkou odpovídají hodnotám nastaveným metodou balíčku
ServiceKeyInjection.Configure
.
Pokud provedete změny projektu HostingStartupPackage a znovu ho zkompilujete, vymažte místní mezipaměti balíčků NuGet, abyste zajistili, že HostingStartupApp obdrží aktualizovaný balíček, a ne zastaralý balíček z místní mezipaměti. Pokud chcete vymazat místní mezipaměti NuGet, spusťte následující příkaz dotnet nuget locals :
dotnet nuget locals all --clear
Aktivace z knihovny tříd
Zkompilujte knihovnu tříd HostingStartupLibrary pomocí příkazu dotnet build.
Přidejte název sestavení knihovny tříd HostingStartupLibrary do
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
proměnné prostředí.Bin-deploy the class library's assembly to the app by copying the HostingStartupLibrary.dll file from the class library's compiled output to the app's bin/Debug folder.
Zkompilujte a spusťte aplikaci. Soubor
<ItemGroup>
projektu aplikace odkazuje na sestavení knihovny tříd (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) (odkaz na kompilaci). Další informace najdete v poznámkách v souboru projektu HostingStartupApp.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
Všimněte si, že hodnoty konfiguračního klíče služby vykreslené indexovou stránkou odpovídají hodnotám nastaveným metodou knihovny
ServiceKeyInjection.Configure
tříd.
Aktivace ze sestavení nasazeného v úložišti modulu runtime
- Projekt StartupDiagnostics používá k úpravě souboru
StartupDiagnostics.deps.json
PowerShell. PowerShell je ve výchozím nastavení nainstalovaný ve Windows počínaje Windows 7 SP1 a Windows Serverem 2008 R2 SP1. Informace o získání PowerShellu na jiných platformách najdete v tématu Instalace různých verzí PowerShellu. - Spusťte skript build.ps1 ve složce RuntimeStore. Skript:
- Vygeneruje
StartupDiagnostics
balíček ve složce obj\packages . - Vygeneruje úložiště runtime pro
StartupDiagnostics
složku úložiště . Příkazdotnet store
ve skriptu používáwin7-x64
identifikátor modulu runtime (RID) pro hostování při spuštění nasazeného ve Windows. Při poskytování hostování spuštění pro jiný modul runtime nahraďte správným identifikátorem RID na řádku 37 skriptu. Úložiště runtime proStartupDiagnostics
později se přesune do úložiště modulu runtime uživatele nebo systému na počítači, kde bude sestavení spotřebováno. Umístění instalace úložiště modulu runtime uživatele proStartupDiagnostics
sestavení je .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll. - Vygeneruje
additionalDeps
forStartupDiagnostics
ve složce additionalDeps . Další závislosti se později přesunou do dalších závislostí uživatele nebo systému. Umístění instalace dalších závislostí uživateleStartupDiagnostics
je.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json
. - Umístí soubor deploy.ps1 do složky nasazení.
- Vygeneruje
- Spusťte skript deploy.ps1 ve složce nasazení. Skript připojí:
StartupDiagnostics
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
do proměnné prostředí.- Cesta k hostování spouštěcích závislostí (ve složce nasazení projektu RuntimeStore) do
DOTNET_ADDITIONAL_DEPS
proměnné prostředí. - Cesta k úložišti modulu runtime (ve složce nasazení projektu RuntimeStore) do
DOTNET_SHARED_STORE
proměnné prostředí.
- Spusťte ukázkovou aplikaci.
/services
Požádejte koncový bod, aby se zobrazily registrované služby aplikace./diag
Požádejte koncový bod o zobrazení diagnostických informací.