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

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í:true1

    • 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.

Project

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, ServiceKeyInjectionkterá implementuje IHostingStartup. 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, ServiceKeyInjectionkterá implementuje IHostingStartup. 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ý:
  • 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 StartupEnhancementobor 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:

  1. 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.
  2. 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:

  1. Spusťte dotnet publish soubor manifestu úložiště modulu runtime odkazovaný v předchozí části.
  2. 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 do DOTNET_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_STOREa DOTNET_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:

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 se použije, když scénář nasazení volá, aby odkazoval na kompilaci na sestavení hostujícího spouštěcího sestavení (soubor .dll ) a přesunul sestavení do jedné z těchto možností:
    • 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ázka kódu

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í ion (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

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

  2. Do proměnné prostředí přidejte název sestavení balíčku HostingStartupPackageASPNETCORE_HOSTINGSTARTUPASSEMBLIES.

  3. 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>
    
  4. 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

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

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

  3. 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.

  4. 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>
    
  5. 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

  1. 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.
  2. 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říkaz dotnet store ve skriptu používá win7-x64identifiká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 pro StartupDiagnostics 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 pro StartupDiagnostics sestavení je .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll.
    • Vygeneruje additionalDeps for StartupDiagnostics 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živatele StartupDiagnostics je .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json.
    • Umístí soubor deploy.ps1 do složky nasazení.
  3. Spusťte skript deploy.ps1 ve složce nasazení. Skript připojí:
    • StartupDiagnosticsASPNETCORE_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í.
  4. Spusťte ukázkovou aplikaci.
  5. /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í:true1
  • 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í:

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.

Project

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, ServiceKeyInjectionkterá implementuje IHostingStartup. 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, ServiceKeyInjectionkterá implementuje IHostingStartup. 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ý:
  • 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 StartupEnhancementobor 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:

  1. 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.
  2. 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:

  1. Spusťte dotnet publish soubor manifestu úložiště modulu runtime odkazovaný v předchozí části.
  2. 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 do DOTNET_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_STOREa DOTNET_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:

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 se použije, když scénář nasazení volá, aby odkazoval na kompilaci na sestavení hostujícího spouštěcího sestavení (soubor .dll ) a přesunul sestavení do jedné z těchto možností:
    • 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ázka kódu

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í ion (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

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

  2. Do proměnné prostředí přidejte název sestavení balíčku HostingStartupPackageASPNETCORE_HOSTINGSTARTUPASSEMBLIES.

  3. 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>
    
  4. 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

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

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

  3. 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.

  4. 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>
    
  5. 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

  1. 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.
  2. 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říkaz dotnet store ve skriptu používá win7-x64identifiká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 pro StartupDiagnostics 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 pro StartupDiagnostics sestavení je .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll.
    • Vygeneruje additionalDeps for StartupDiagnostics 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živatele StartupDiagnostics je .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json.
    • Umístí soubor deploy.ps1 do složky nasazení.
  3. Spusťte skript deploy.ps1 ve složce nasazení. Skript připojí:
    • StartupDiagnosticsASPNETCORE_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í.
  4. Spusťte ukázkovou aplikaci.
  5. /services Požádejte koncový bod, aby se zobrazily registrované služby aplikace. /diag Požádejte koncový bod o zobrazení diagnostických informací.