Použití hostování spouštěcích sestavení v ASP.NET Core

Od Pavel Krymets

IHostingStartupImplementace (hostující spuštění) přidává vylepšení aplikace při spuštění z externího sestavení. Externí knihovna může například použít hostitelskou implementaci při spuštění k poskytnutí dalších poskytovatelů konfigurace nebo služeb do aplikace.

Zobrazit nebo stáhnout ukázkový kód (Jak stáhnout)

HostingStartup – atribut

Atribut HostingStartup označuje přítomnost hostitelského sestavení po spuštění, které se aktivuje za běhu.

Pro zadání sestavení nebo sestavení obsahujícího Startup třídu se automaticky vyhledá HostingStartup atribut. Seznam sestavení pro vyhledávání HostingStartup atributů je načten za běhu z konfigurace ve WebHostDefaults. HostingStartupAssembliesKey. Seznam sestavení pro vyloučení ze zjišťování je načten z WebHostDefaults. HostingStartupExcludeAssembliesKey.

V následujícím příkladu je obor názvů hostujícího spouštěcího sestavení StartupEnhancement . Třída obsahující spouštěcí kód hostování je StartupEnhancementHostingStartup :

[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]

HostingStartupAtribut je obvykle umístěn v souboru implementační třídy sestavení, který spouští IHostingStartup .

Najít načtená hostování spouštěcích sestavení

Chcete-li zjistit načtená hostování spouštěcích sestavení, povolte protokolování a ověřte protokoly aplikace. Chyby, ke kterým dochází při načítání sestavení, jsou protokolovány. Načtená hostující spouštěcí sestavení jsou protokolována na úrovni ladění a všechny chyby jsou protokolovány.

Zakázat automatické načítání hostujících spouštěcích sestavení

Chcete-li zakázat automatické načítání hostujících spouštěcích sestavení, 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í na true nebo 1 :

    • Zabránit hostování nastavení konfigurace hostitele 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 tomu, aby se konkrétní hostování spouštěcích sestavení načetlo, nastavte jednu z následujících hodnot na řetězec, který je hostitelem spouštěcích sestavení s oddělovači, aby při spuštění vyloučil:

    • Hostování nastavení konfigurace vyloučení sestavení hostitele:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
          Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseSetting(
                          WebHostDefaults.HostingStartupExcludeAssembliesKey, 
                          "{ASSEMBLY1;ASSEMBLY2; ...}")
                      .UseStartup<Startup>();
              });
      

      {ASSEMBLY1;ASSEMBLY2; ...}Zástupný 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í se chování nastavení hostitele.

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 vlastností aplikace.

Project

Vytvořte hostování po spuštění s některým z následujících typů projektů:

Knihovna tříd

Rozšíření spouštění hostitele lze poskytnout v knihovně tříd. Knihovna obsahuje HostingStartup atribut.

Vzorový kód obsahuje Razor stránku aplikace, HostingStartupApp a knihovnu tříd HostingStartupLibrary. Knihovna tříd:

  • Obsahuje hostující spouštěcí třídu, ServiceKeyInjection která implementuje IHostingStartup . ServiceKeyInjection Přidá dvojici řetězců služby k konfiguraci aplikace pomocí zprostředkovatele konfigurace v paměti (AddInMemoryCollection).
  • Obsahuje HostingStartup atribut, který identifikuje obor názvů a třídu pro spuštění hostingu.

ServiceKeyInjection Configure Metoda třídy používá IWebHostBuilder k přidání vylepšení 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);
            });
        }
    }
}

Stránka indexu aplikace načte a vykreslí hodnoty konfigurace pro dva klíče nastavené hostujícím sestavením pro spuštění 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()
    {
    }
}

vzorový kód obsahuje také projekt NuGet balíčku, který poskytuje samostatné hostování spouštěné HostingStartupPackage. Balíček má stejné charakteristiky jako knihovna tříd popsané výše. Balíček:

  • Obsahuje hostující spouštěcí třídu, ServiceKeyInjection která implementuje IHostingStartup . ServiceKeyInjection Přidá do konfigurace aplikace dvojici řetězců služby.
  • Obsahuje HostingStartup 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);
            });
        }
    }
}

Stránka indexu aplikace čte a vykresluje konfigurační hodnoty pro dva klíče nastavené hostujícím sestavením pro spuštění balíčku:

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 .NET Framework.

Dynamické rozšíření spouštění, které nevyžaduje odkazování v době kompilace pro aktivaci, lze poskytnout v konzolové aplikaci bez vstupního bodu, který obsahuje HostingStartup atribut. Publikování konzolové aplikace vytváří hostující spouštěcí sestavení, které lze spotřebovat z běhového úložiště.

V tomto procesu se používá Konzolová aplikace bez vstupního bodu, protože:

  • Soubor závislostí je vyžadován ke využívání hostování při spouštění v sestavení, ve kterém se spouští. Soubor závislostí je spustitelný App Asset, který je vytvořený publikováním aplikace, ne knihovny.
  • Knihovnu nelze přidat přímo do úložiště balíčků modulu runtime, což vyžaduje projekt spustitelný, který cílí na sdílený modul runtime.

Při vytváření dynamického spuštění hostování:

  • Hostující spouštěcí sestavení je vytvořeno z konzolové aplikace bez vstupního bodu, který:
    • Obsahuje třídu, která obsahuje IHostingStartup implementaci.
    • Obsahuje atribut HostingStartup pro identifikaci IHostingStartup implementační třídy.
  • Konzolová aplikace se publikuje, aby získala závislosti hostování při spuštění. V důsledku publikování konzolové aplikace je, že nevyužité závislosti se oříznou ze souboru závislostí.
  • Soubor závislostí je upraven, aby bylo možné nastavit umístění modulu runtime hostujícího spouštěcí sestavení.
  • Hostování spouštěcího sestavení a jeho souboru závislostí je umístěno do úložiště balíčků modulu runtime. Chcete-li zjistit hostující sestavení po spuštění a jeho soubor závislosti, jsou uvedeny ve dvojici proměnných prostředí.

Aplikace konzoly odkazuje na balíček Microsoft. AspNetCore. hostinging. 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 obor názvů StartupEnhancement a třída StartupEnhancementHostingStartup :

[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]

Třída implementuje IHostingStartup . ConfigureMetoda třídy používá IWebHostBuilder k přidání vylepšení aplikace. IHostingStartup.Configure ve spouštěcím sestavení, které je voláno modulem runtime před Startup.Configure v uživatelském kódu, což umožňuje přepsání libovolné konfigurace poskytované hostováním sestavení po spuštění.

namespace StartupEnhancement
{
    public class StartupEnhancementHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            // Use the IWebHostBuilder to add app enhancements.
        }
    }
}

Při sestavování IHostingStartup projektu, soubor závislosti (.deps.jszapnuto) nastaví runtime 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 pouze čá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 chcete, aby měla konfigurace hostujícího spuštění přednost, nebo jestli má přednost konfigurace aplikace:

  1. Poskytněte konfiguraci do aplikace pomocí nástroje ConfigureAppConfiguration , aby se konfigurace po spuštění delegátů aplikace načetla ConfigureAppConfiguration . Hostování spouštěcí konfigurace má přednost před konfigurací aplikace pomocí tohoto přístupu.
  2. Zadejte konfiguraci do aplikace pomocí nástroje UseConfiguration , aby se konfigurace načetla předtím, než se ConfigureAppConfiguration spustí Delegáti aplikace. Hodnoty konfigurace aplikace mají přednost před metodami poskytovanými při spuštění hostování 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);
    }
}

Zadejte hostující sestavení pro spuštění

V případě knihovny tříd nebo konzolové aplikace dodané po spuštění zadejte název hostující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íky.

Pro atribut jsou kontrolována pouze spouštěcí sestavení hostování HostingStartup . Pro ukázkovou aplikaci HostingStartupApp, aby bylo možné zjistit, jak jsou popsány v předchozí části, je proměnná prostředí nastavena na následující hodnotu:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Hostování spouštěcího sestavení lze také nastavit pomocí nastavení konfigurace hostování po spouštěcích sestaveních hostitele:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseSetting(
                    WebHostDefaults.HostingStartupAssembliesKey, 
                    "{ASSEMBLY1;ASSEMBLY2; ...}")
                .UseStartup<Startup>();
        });

{ASSEMBLY1;ASSEMBLY2; ...}Zástupný symbol představuje seznam sestavení oddělených středníkem.

Pokud je přítomno více sestavení hostování po spuštění, jejich Configure metody jsou spouštěny v pořadí, ve kterém jsou uvedena.

Aktivace

Možnosti pro hostování aktivace po spuštění jsou:

  • Běhové úložiště: Aktivace nevyžaduje pro aktivaci odkaz na čas kompilace. Ukázková aplikace umístí hostující spouštěcí sestavení a soubory závislostí do složky, nasazení, aby se usnadnilo nasazení hostitelského spouštění v prostředí s více počítači. Složka pro nasazení obsahuje také skript PowerShellu, který vytvoří nebo upraví proměnné prostředí v systému nasazení, aby bylo možné hostující spuštění.
  • Pro aktivaci se vyžaduje referenční informace k času kompilace.

Úložiště modulu runtime

Implementace hostování po spuštění je umístěna do úložiště modulu runtime. Vylepšená aplikace nevyžaduje odkaz na sestavení v době kompilace.

Po sestavení hostitelského spuště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á se umístění úložiště modulu runtime do DOTNET_SHARED_STORE proměnné prostředí.

Úprava a umístění souboru závislostí hostitelské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 poskytnutím sady dalších možností.deps.jssouborů ke sloučení s vlastními soubory .deps.jspři spuštění.
  • Zajistěte, aby bylo sestavení po spuštění hostování zjistitelné a načítatelné.

Doporučeným přístupem k vygenerování souboru dalších závislostí je:

  1. Spusťte dotnet publish soubor manifestu úložiště modulu runtime, na který odkazuje předchozí část.
  2. Odeberte odkaz na manifest z runtime knihoven a část výsledného souboru .deps.jsna soubor .

V příkladu projektu je store.manifest/1.0.0 vlastnost odebrána z targets oddílu a libraries :

{
  "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"
    }
  }
}

Umístěte .deps.jsna soubor 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řidané do DOTNET_ADDITIONAL_DEPS proměnné prostředí.
  • {SHARED FRAMEWORK NAME}: Sdílené rozhraní vyžadované pro tento další soubor závislostí.
  • {SHARED FRAMEWORK VERSION}: Minimální verze sdílené architektury.
  • {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 proměnné prostředí další umístění souborů DOTNET_ADDITIONAL_DEPS závislostí.

V ukázkové aplikaci (projekt RuntimeStore) se sestavení úložiště modulu runtime a vygenerování souboru dalších 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í

Pro usnadnění nasazení hostitelského spuštění v prostředí s více počítače vytvoří ukázková aplikace složku nasazení v publikovaném výstupu, která obsahuje:

  • Hostující úložiště spuštění modulu runtime.
  • Hostující soubor závislostí po spuštění.
  • Skript PowerShellu, který vytvoří nebo upraví , a pro ASPNETCORE_HOSTINGSTARTUPASSEMBLIES DOTNET_SHARED_STORE podporu DOTNET_ADDITIONAL_DEPS aktivace 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í spouštění hostování je možné skytovat v balíčku NuGet počítače. Balíček má HostingStartup atribut . Typy hostování po spuštění poskytované balíčkem jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:

  • Soubor projektu rozšířené aplikace vytvoří odkaz na balíček pro spuštění hostování v souboru projektu aplikace (referenční informace za kompilace). Při použití odkazu na dobu kompilace jsou hostitelské spouštěcí sestavení a všechny jeho závislosti začleněny do souboru závislostí aplikace (.deps.js na). Tento přístup platí pro hostující spouštěcí balíček sestavení publikovaný do nuget.org.
  • Soubor závislostí hostujícího spuštění je k dispozici rozšířené aplikaci, jak je popsáno v části Úložiště modulu runtime (bez odkazu na dobu kompilace).

Další informace o balíčcích NuGet a úložiště modulu runtime najdete v následujících tématech:

Project bin

Vylepšení spouštění hostování může být zajištěno sestavením nasazenou přihrádek ve vylepšené aplikaci. Typy hostování po spuštění poskytované sestavením jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:

  • Soubor projektu rozšířené aplikace vytváří odkaz na sestavení na spuštění hostování (referenční informace v době kompilace). Při použití odkazu na dobu kompilace jsou hostitelské spouštěcí sestavení a všechny jeho závislosti začleněny do souboru závislostí aplikace (.deps.js na). Tento přístup platí v případě, že scénář nasazení vyžaduje vytvoření odkazu na sestavení po spuštění hostování (.dll) a přesunutí sestavení do jedné z těchto možností:
    • Projekt, který ho spotřebovává.
    • Umístění přístupné z projektu, který ho spotřebovává.
  • Soubor závislostí hostujícího spuštění je k dispozici rozšířené aplikaci, jak je popsáno v části Úložiště modulu runtime (bez odkazu na dobu kompilace).
  • Při cílení na .NET Framework je sestavení načítá ve výchozím kontextu zatížení, což v nástroji .NET Framework znamená, že sestavení je umístěno v jednom 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 .NET Framework aplikací. Další informace najdete v tématu Postupy: Instalace sestavení do globální mezipaměti sestavení (GAC) v .NET Framework dokumentaci.

Ukázka kódu

Ukázkový kód (jak stáhnout) ukazuje scénáře implementace hostování po spuštění:

  • Dvě sestavení hostující spouštěcí sestavení (knihovny tříd) nastaví dvojici párů klíč-hodnota konfigurace v paměti:
    • NuGet balíček (HostingStartupPackage)
    • Knihovna tříd (HostingStartupLibrary)
  • Spuštění hostování se aktivuje ze sestavení nasazené v obchodě modulu runtime (StartupDiagnostics). Sestavení přidá do aplikace při spuštění dva middleware, které poskytují diagnostické informace o:
    • Registrované služby
    • Adresa (schéma, hostitel, základní cesta, cesta, řetězec dotazu)
    • Připojení (vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát)
    • Hlavičky požadavku
    • Proměnné prostředí

Spuštění ukázky:

Aktivace z NuGet balíčku

  1. Zkompilujte balíček HostingStartupPackage pomocí příkazu dotnet pack.

  2. Přidejte název sestavení balíčku HostingStartupPackage do ASPNETCORE_HOSTINGSTARTUPASSEMBLIES proměnné prostředí.

  3. Zkompilujte a spusťte aplikaci. Vylepšená aplikace obsahuje odkaz na balíček (referenční informace v době kompilace). V souboru projektu aplikace určuje výstup projektu balíčku <PropertyGroup> (.. /HostingStartupPackage/bin/Debug) jako zdroj balíčku. To aplikaci umožňuje používat balíček 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>
    
  4. Všimněte si, že hodnoty konfiguračního klíče služby vykreslené stránkou Index odpovídají hodnotám nastaveným metodou ServiceKeyInjection.Configure balíčku.

Pokud v projektu HostingStartupPackage změníte a znovu ho zkompilujete, vymažte místní mezipaměti balíčků NuGet, aby se zajistilo, že aplikace HostingStartupApp obdrží aktualizovaný balíček, a ne zastaralý balíček z místní mezipaměti. Pokud chcete vymazat místní mezipaměti NuGet mezipaměti, spusťte následující příkaz dotnet nuget locals:

dotnet nuget locals all --clear

Aktivace z knihovny tříd

  1. Zkompilujte knihovnu tříd HostingStartupLibrary pomocí příkazu dotnet build.

  2. Do proměnné prostředí přidejte název sestavení knihovny tříd HostingStartupLibrary. ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

  3. bin– nasadí sestavení knihovny tříd do aplikace zkopírováním souboru HostingStartupLibrary.dll z kompilované výstupu knihovny tříd do složky bin/Debug aplikace.

  4. Zkompilujte a spusťte aplikaci. Objekt v souboru projektu aplikace odkazuje na sestavení knihovny tříd <ItemGroup> (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) (odkaz v době kompilace). 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>
    
  5. Všimněte si, že hodnoty konfiguračního klíče služby vykreslené stránkou Index odpovídají hodnotám nastaveným metodou knihovny ServiceKeyInjection.Configure tříd.

Aktivace ze sestavení nasazené v obchodě za běhu

  1. Projekt StartupDiagnostics používá PowerShell k úpravěStartupDiagnostics.deps.js souboru. PowerShell se ve výchozím nastavení instaluje Windows počínaje verzí Windows 7 SP1 a Windows Server 2008 R2 SP1. Informace o získání PowerShellu na jiných platformách najdete v tématu Instalace různých verzí PowerShellu.
  2. Spusťte skript build.ps1 ve složce RuntimeStore. Tento skript:
    • StartupDiagnosticsVygeneruje balíček ve složce obj\packages.
    • Vygeneruje úložiště modulu runtime StartupDiagnostics pro ve složce úložiště. Příkaz dotnet store ve skriptu používá identifikátor modulu runtime win7-x64 (RID) pro hostitelské spuštění nasazené do Windows. Při poskytování hostitelského spuštění pro jiný modul runtime nahraďte správným rid na řádku 37 skriptu. Úložiště modulu runtime pro by se později přesunulo do úložiště modulu runtime uživatele nebo systému na počítači, kde bude StartupDiagnostics sestavení spotřebováno. Umístění instalace uživatelského úložiště modulu runtime pro sestavení je StartupDiagnostics .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll.
    • additionalDepsVygeneruje StartupDiagnostics pro ve složce additionalDeps. Další závislosti by se později přesunuly do dalších závislostí uživatele nebo systému. Další umístění instalace závislostí uživatele je StartupDiagnostics .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.jsna .
    • Umístí deploy.ps1 do složky nasazení.
  3. Spusťte deploy.ps1 skript ve složce nasazení. Skript připojí:
    • StartupDiagnostics do ASPNETCORE_HOSTINGSTARTUPASSEMBLIES proměnné prostředí.
    • Cesta k hostování závislostí po spuštění (ve složce nasazení projektu RuntimeStore) k DOTNET_ADDITIONAL_DEPS proměnné prostředí.
    • Cesta k uložení modulu runtime (ve složce nasazení projektu RuntimeStore) k DOTNET_SHARED_STORE proměnné prostředí.
  4. Spusťte ukázkovou aplikaci.
  5. Požádejte /services koncový bod o zobrazení zaregistrovaných služeb aplikace. Požádejte /diag koncový bod o zobrazení diagnostických informací.

Implementace IHostingStartup (hostování po spuštění) přidává vylepšení do aplikace při spuštění z externího sestavení. Externí knihovna může například pomocí implementace hostování po spuštění poskytovat aplikaci další poskytovatele konfigurace nebo služby.

Zobrazení nebo stažení ukázkového kódu (stažení)

Atribut HostingStartup

Atribut HostingStartup indikuje přítomnost hostitelského spouštěcího sestavení, které se má aktivovat za běhu.

Sestavení položky nebo sestavení obsahující Startup třídu je automaticky zkontrolováno pro HostingStartup atribut. Seznam sestavení pro vyhledávání atributů se načte za běhu z konfigurace HostingStartup v WebHostDefaults.HostingStartupAssembliesKey. Seznam sestavení, která se vyloučí ze zjišťování, se načte z třídy WebHostDefaults.HostingStartupExcludeAssembliesKey. Další informace naleznete v části Web Host: Hosting Startup Assemblies and Web Host: Hosting Startup Exclude Assemblies.

V následujícím příkladu je obor názvů sestavení po spuštění hostování StartupEnhancement . Třída obsahující spouštěcí kód hostující hostování je StartupEnhancementHostingStartup :

[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]

Atribut je obvykle umístěn v souboru třídy implementace sestavení po spuštění HostingStartup IHostingStartup hostování.

Zjištění načtených hostitelských spouštěcích sestavení

Pokud chcete zjistit načtená hostitelská spouštěcí sestavení, povolte protokolování a zkontrolujte protokoly aplikace. Chyby, ke kterým dochází při načítání sestavení, jsou protokolovány. Načtená sestavení hostující spuštění jsou protokolována na úrovni ladění a všechny chyby jsou protokolovány.

Zákaz automatického načítání hostovaných spouštěcích sestavení

Pokud chcete zakázat automatické načítání hostovaných spouštěcích sestavení, použijte jeden z následujících přístupů:

  • Chcete-li zabránit načtení všech hostitelských spouštěcích sestavení, nastavte jednu z následujících možností na true nebo 1 :
  • Chcete-li zabránit načítání konkrétních spouštěcích sestavení hostování, nastavte jednu z následujících možností na řetězec s oddělovači středníkem, který je hostitelem spouštěcích sestavení, která se mají vyloučit při spuštění:

Pokud je nastavené nastavení konfigurace hostitele i proměnná prostředí, řídí toto chování nastavení hostitele.

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.

Project

Vytvořte spuštění hostování s následujícími typy projektů:

Knihovna tříd

Vylepšení spouštění hostování lze získat v knihovně tříd. Knihovna obsahuje HostingStartup atribut .

Ukázkový kód obsahuje aplikaci Pages HostingStartupApp a knihovnu tříd Razor HostingStartupLibrary. Knihovna tříd:

  • Obsahuje hostující spouštěcí třídu ServiceKeyInjection , která implementuje IHostingStartup . ServiceKeyInjection přidá do konfigurace aplikace pár řetězců služby pomocí zprostředkovatele konfigurace v paměti (AddInMemoryCollection).
  • Zahrnuje HostingStartup atribut, který identifikuje obor názvů a třídu hostování spuštění.

Metoda ServiceKeyInjection třídy Configure používá k přidání vylepšení do IWebHostBuilder 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 čte a vykresluje 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é hostitelské spuštění HostingStartupPackage. Balíček má stejné vlastnosti jako dříve popsaná knihovna tříd. Balíček:

  • Obsahuje hostující spouštěcí třídu ServiceKeyInjection , která implementuje IHostingStartup . ServiceKeyInjection přidá do konfigurace aplikace dvojici řetězců služby.
  • Zahrnuje HostingStartup 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);
            });
        }
    }
}

Stránka Index aplikace načte a vykreslí konfigurační hodnoty pro dva klíče nastavené hostitelským spouštěcím sestavením balíčku:

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 .NET Framework.

Vylepšení dynamického hostování při spuštění, které nevyžaduje referenční informace o době kompilace pro aktivaci, lze v aplikaci konzoly získat bez vstupního bodu, který obsahuje HostingStartup atribut. Publikováním konzolové aplikace se vytvoří hostitelské spouštěcí sestavení, které je možné využívat z úložiště modulu runtime.

V tomto procesu se používá konzolová aplikace bez vstupního bodu, protože:

  • Soubor závislostí je vyžadován k používání hostitelského spuštění v sestavení po spuštění hostování. Soubor závislostí je spustitelný prostředek aplikace vytvořený publikováním aplikace, nikoli knihovnou.
  • Knihovnu nelze přidat přímo do úložiště balíčků modulu runtime,které vyžaduje spustitelný projekt cílený na sdílený modul runtime.

Při vytváření dynamického hostování při spuštění:

  • Sestavení hostující spuštění je vytvořeno z konzolové aplikace bez vstupního bodu, který:
    • Zahrnuje třídu, která obsahuje IHostingStartup implementaci.
    • Zahrnuje atribut HostingStartup pro identifikaci IHostingStartup třídy implementace.
  • Aplikace konzoly je publikovaná za účelem získání závislostí hostitelského spuštění. V důsledku publikování konzolové aplikace je oříznuté nepoužívané závislosti ze souboru závislostí.
  • Soubor závislostí je upraven tak, aby nastavil umístění modulu runtime hostitelského spouštěcího sestavení.
  • Sestavení hostující spuštění a jeho soubor závislostí se umístí do úložiště balíčků modulu runtime. Pokud chcete zjistit sestavení po spuštění hostování a jeho soubor závislostí, jsou uvedeny 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 pro načítání a IHostingStartup spouštění při sestavování IWebHost . V následujícím příkladu je obor názvů StartupEnhancement a třída je StartupEnhancementHostingStartup :

[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]

Třída implementuje IHostingStartup . Metoda třídy Configure používá k IWebHostBuilder přidání vylepšení do aplikace . IHostingStartup.Configure v hostitelském spouštěcím sestavení je modul runtime volán dříve v uživatelském kódu, což umožňuje uživatelskému kódu přepsat jakoukoli konfiguraci poskytnutou Startup.Configure sestavením po spuštění hostitele.

namespace StartupEnhancement
{
    public class StartupEnhancementHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            // Use the IWebHostBuilder to add app enhancements.
        }
    }
}

Při sestavování projektu nastaví soubor závislostí (.deps.jsna ) umístění sestavení IHostingStartup do složky ** runtime 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á při spuštění hostování

Existují dva přístupy ke zpracování konfigurace v závislosti na tom, jestli má mít přednost konfigurace spuštění hostování, nebo jestli má přednost konfigurace aplikace:

  1. Po spuštění delegátů aplikace poskytnte aplikaci konfiguraci pomocí pro načtení ConfigureAppConfiguration ConfigureAppConfiguration konfigurace. Hostování konfigurace po spuštění má přednost před konfigurací aplikace pomocí tohoto přístupu.
  2. Pomocí příkazu zadejte konfiguraci aplikace, která načte konfiguraci před spuštěním UseConfiguration ConfigureAppConfiguration delegátů aplikace. Konfigurační hodnoty aplikace mají přednost před hodnotami poskytovanými při spuštění hostování 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í hostitelského spouštěcího sestavení

Pro spuštění hostování pomocí knihovny tříd nebo konzolové aplikace zadejte název hostitelského spouštěcího sestavení do ASPNETCORE_HOSTINGSTARTUPASSEMBLIES proměnné prostředí. Proměnná prostředí je seznam sestavení oddělený středníkem.

Pouze hostující spouštěcí sestavení jsou kontrolovány pro HostingStartup atribut. Pro ukázkovou aplikaci HostingStartupApp je proměnná prostředí nastavená na následující hodnotu, aby se zjistily hostingové startupy popsané výše:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Hostující spouštěcí sestavení lze nastavit také pomocí nastavení konfigurace hostitele Hosting Startup Assemblies.

Pokud je k dispozici více hostitelských spouštěcích sestavení, jejich metody jsou spouštěny v pořadí, v pořadí, v uvedeném Configure pořadí.

Aktivace

Možnosti hostování aktivace po spuštění:

  • Úložiště modulu runtime:Aktivace nevyžaduje pro aktivaci referenční informace v době kompilace. Ukázková aplikace umístí hostující spouštěcí sestavení a soubory závislostí do složky, nasazení , aby se usnadnilo nasazení hostitelského spuštění v prostředí s více počítače. 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í.
  • Pro aktivaci se vyžaduje referenční informace k času kompilace.

Úložiště modulu runtime

Implementace hostování po spuštění je umístěna do úložiště modulu runtime. Vylepšená aplikace nevyžaduje odkaz na sestavení v době kompilace.

Po sestavení hostitelského spuště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á se umístění úložiště modulu runtime do DOTNET_SHARED_STORE proměnné prostředí.

Úprava a umístění souboru závislostí hostitelské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 poskytnutím sady dalších možností.deps.jssouborů ke sloučení s vlastními soubory .deps.jspři spuštění.
  • Zajistěte, aby bylo sestavení po spuštění hostování zjistitelné a načítatelné.

Doporučeným přístupem k vygenerování souboru dalších závislostí je:

  1. Spusťte dotnet publish soubor manifestu úložiště modulu runtime, na který odkazuje předchozí část.
  2. Odeberte odkaz na manifest z runtime knihoven a část výsledného souboru .deps.jsna soubor .

V příkladu projektu je store.manifest/1.0.0 vlastnost odebrána z targets oddílu a libraries :

{
  "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"
    }
  }
}

Umístěte .deps.jsna soubor 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řidané do DOTNET_ADDITIONAL_DEPS proměnné prostředí.
  • {SHARED FRAMEWORK NAME}: Sdílené rozhraní vyžadované pro tento další soubor závislostí.
  • {SHARED FRAMEWORK VERSION}: Minimální verze sdílené architektury.
  • {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 proměnné prostředí další umístění souborů DOTNET_ADDITIONAL_DEPS závislostí.

V ukázkové aplikaci (projekt RuntimeStore) se sestavení úložiště modulu runtime a vygenerování souboru dalších 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í

Pro usnadnění nasazení hostitelského spuštění v prostředí s více počítače vytvoří ukázková aplikace složku nasazení v publikovaném výstupu, která obsahuje:

  • Hostující úložiště spuštění modulu runtime.
  • Hostující soubor závislostí po spuštění.
  • Skript PowerShellu, který vytvoří nebo upraví , a pro ASPNETCORE_HOSTINGSTARTUPASSEMBLIES DOTNET_SHARED_STORE podporu DOTNET_ADDITIONAL_DEPS aktivace 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í spouštění hostování je možné skytovat v balíčku NuGet počítače. Balíček má HostingStartup atribut . Typy hostování po spuštění poskytované balíčkem jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:

  • Soubor projektu rozšířené aplikace vytvoří odkaz na balíček pro spuštění hostování v souboru projektu aplikace (referenční informace za kompilace). Při použití odkazu na dobu kompilace jsou hostitelské spouštěcí sestavení a všechny jeho závislosti začleněny do souboru závislostí aplikace (.deps.js na). Tento přístup platí pro hostující spouštěcí balíček sestavení publikovaný do nuget.org.
  • Soubor závislostí hostujícího spuštění je k dispozici rozšířené aplikaci, jak je popsáno v části Úložiště modulu runtime (bez odkazu na dobu kompilace).

Další informace o balíčcích NuGet a úložiště modulu runtime najdete v následujících tématech:

Project bin

Vylepšení spouštění hostování může být zajištěno sestavením nasazenou přihrádek ve vylepšené aplikaci. Typy hostování po spuštění poskytované sestavením jsou k dispozici pro aplikaci pomocí jednoho z následujících přístupů:

  • Soubor projektu rozšířené aplikace vytváří odkaz na sestavení na spuštění hostování (referenční informace v době kompilace). Při použití odkazu na dobu kompilace jsou hostitelské spouštěcí sestavení a všechny jeho závislosti začleněny do souboru závislostí aplikace (.deps.js na). Tento přístup platí v případě, že scénář nasazení vyžaduje vytvoření odkazu na sestavení po spuštění hostování (.dll) a přesunutí sestavení do jedné z těchto možností:
    • Projekt, který ho spotřebovává.
    • Umístění přístupné z projektu, který ho spotřebovává.
  • Soubor závislostí hostujícího spuštění je k dispozici rozšířené aplikaci, jak je popsáno v části Úložiště modulu runtime (bez odkazu na dobu kompilace).
  • Při cílení na .NET Framework je sestavení načítá ve výchozím kontextu zatížení, což v nástroji .NET Framework znamená, že sestavení je umístěno v jednom 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 .NET Framework aplikací. Další informace najdete v tématu Postupy: Instalace sestavení do globální mezipaměti sestavení (GAC) v .NET Framework dokumentaci.

Ukázka kódu

Ukázkový kód (jak stáhnout) ukazuje scénáře implementace hostování po spuštění:

  • Dvě sestavení hostující spouštěcí sestavení (knihovny tříd) nastaví dvojici párů klíč-hodnota konfigurace v paměti:
    • NuGet balíček (HostingStartupPackage)
    • Knihovna tříd (HostingStartupLibrary)
  • Spuštění hostování se aktivuje ze sestavení nasazené v obchodě modulu runtime (StartupDiagnostics). Sestavení přidá do aplikace při spuštění dva middleware, které poskytují diagnostické informace o:
    • Registrované služby
    • Adresa (schéma, hostitel, základní cesta, cesta, řetězec dotazu)
    • Připojení (vzdálená IP adresa, vzdálený port, místní IP adresa, místní port, klientský certifikát)
    • Hlavičky požadavku
    • Proměnné prostředí

Spuštění ukázky:

Aktivace z NuGet balíčku

  1. Zkompilujte balíček HostingStartupPackage pomocí příkazu dotnet pack.

  2. Přidejte název sestavení balíčku HostingStartupPackage do ASPNETCORE_HOSTINGSTARTUPASSEMBLIES proměnné prostředí.

  3. Zkompilujte a spusťte aplikaci. Vylepšená aplikace obsahuje odkaz na balíček (referenční informace v době kompilace). V souboru projektu aplikace určuje výstup projektu balíčku <PropertyGroup> (.. /HostingStartupPackage/bin/Debug) jako zdroj balíčku. To aplikaci umožňuje používat balíček 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>
    
  4. Všimněte si, že hodnoty konfiguračního klíče služby vykreslené stránkou Index odpovídají hodnotám nastaveným metodou ServiceKeyInjection.Configure balíčku.

Pokud v projektu HostingStartupPackage změníte a znovu ho zkompilujete, vymažte místní mezipaměti balíčků NuGet, aby se zajistilo, že aplikace HostingStartupApp obdrží aktualizovaný balíček, a ne zastaralý balíček z místní mezipaměti. Pokud chcete vymazat místní NuGet mezipaměti, spusťte následující příkaz dotnet nuget locals:

dotnet nuget locals all --clear

Aktivace z knihovny tříd

  1. Zkompilujte knihovnu tříd HostingStartupLibrary pomocí příkazu dotnet build.

  2. Do proměnné prostředí přidejte název sestavení knihovny tříd HostingStartupLibrary. ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

  3. bin–nasazení sestavení knihovny tříd do aplikace zkopírováním souboru HostingStartupLibrary.dll z kompilované výstupu knihovny tříd do složky bin/Debug aplikace.

  4. Zkompilujte a spusťte aplikaci. Objekt v souboru projektu aplikace odkazuje na sestavení knihovny tříd <ItemGroup> (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) (odkaz v době kompilace). 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>
    
  5. Všimněte si, že hodnoty konfiguračního klíče služby vykreslené stránkou Index odpovídají hodnotám nastaveným metodou knihovny ServiceKeyInjection.Configure tříd.

Aktivace ze sestavení nasazené v obchodě za běhu

  1. Projekt StartupDiagnostics používá PowerShell k úpravěStartupDiagnostics.deps.js souboru. PowerShell se ve výchozím nastavení instaluje Windows počínaje verzí Windows 7 SP1 a Windows Server 2008 R2 SP1. Informace o získání PowerShellu na jiných platformách najdete v tématu Instalace různých verzí PowerShellu.
  2. Spusťte skript build.ps1 ve složce RuntimeStore. Tento skript:
    • StartupDiagnosticsVygeneruje balíček ve složce obj\packages.
    • Vygeneruje úložiště modulu runtime StartupDiagnostics pro ve složce úložiště. Příkaz dotnet store ve skriptu používá identifikátor modulu runtime win7-x64 (RID) pro hostitelské spuštění nasazené Windows. Při poskytování hostitelského spuštění pro jiný modul runtime nahraďte správným rid na řádku 37 skriptu. Úložiště modulu runtime pro by se později přesunulo do úložiště modulu runtime uživatele nebo systému na počítači, kde bude StartupDiagnostics sestavení spotřebováno. Umístění instalace uživatelského úložiště modulu runtime pro sestavení je StartupDiagnostics .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll.
    • additionalDepsVygeneruje StartupDiagnostics pro ve složce additionalDeps. Další závislosti by se později přesunuly do dalších závislostí uživatele nebo systému. Další umístění instalace závislostí uživatele je StartupDiagnostics .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.jsna.
    • Umístí deploy.ps1 do složky nasazení.
  3. Spusťte deploy.ps1 skript ve složce nasazení. Skript připojí:
    • StartupDiagnostics do ASPNETCORE_HOSTINGSTARTUPASSEMBLIES proměnné prostředí.
    • Cesta k hostování závislostí po spuštění (ve složce nasazení projektu RuntimeStore) k DOTNET_ADDITIONAL_DEPS proměnné prostředí.
    • Cesta k uložení modulu runtime (ve složce nasazení projektu RuntimeStore) k DOTNET_SHARED_STORE proměnné prostředí.
  4. Spusťte ukázkovou aplikaci.
  5. Požádejte /services koncový bod o zobrazení zaregistrovaných služeb aplikace. Požádejte /diag koncový bod o zobrazení diagnostických informací.