Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Warning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Important
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
En IHostingStartup (värdbaserad startup) implementering lägger till förbättringar i en app vid programstart från en extern samling. Ett externt bibliotek kan till exempel använda en host-startup-implementering för att tillhandahålla ytterligare konfigurationsleverantörer eller tjänster till en app.
Visa eller ladda ned exempelkod (hur du laddar ned)
HostingStartup-attribut
Ett HostingStartup-attribut anger förekomsten av en värdmiljö-startmontering som ska aktiveras vid körning.
Inmatningssammansättningen eller sammansättningen med Startup klassen genomsöks automatiskt efter attributet HostingStartup. Listan över sammansättningar i vilka HostingStartup attribut ska sökas läses in vid körning från konfigurationen i WebHostDefaults.HostingStartupAssembliesKey. Listan över sammansättningar som ska undantas från identifiering läses in från WebHostDefaults.HostingStartupExcludeAssembliesKey.
I följande exempel är namnområdet för värdsammansättningen av startprogrammet StartupEnhancement. Klassen som innehåller värdstartkoden är StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Attributet HostingStartup finns vanligtvis i implementeringsklassfilen IHostingStartup för värdstartsammanställningen.
Identifiera inlästa startsammansättningar för värd
Om du vill identifiera inlästa startsammansättningar för värdtjänster aktiverar du loggning och kontrollerar appens loggar. Fel som uppstår vid inläsning av sammansättningar loggas. Inlästa värdstartssammansättningar loggas på felsökningsnivå och alla fel loggas.
Inaktivera automatisk inläsning av värdstartssammansättningar
Om du vill inaktivera automatisk inläsning av värdstartssammansättningar använder du någon av följande metoder:
- Om du vill förhindra att alla värdstartsammansättningar läses in anger du något av följande till - trueeller- 1:- Förhindra konfigurationsinställning för värd för värdstart: - public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.PreventHostingStartupKey, "true") .UseStartup<Startup>(); });
- ASPNETCORE_PREVENTHOSTINGSTARTUPmiljövariabel.
 
- Om du vill förhindra att specifika startsammansättningar för värdtjänster läses in, ställ in något av följande på en semikolonavgränsad sträng över startsammansättningar som ska uteslutas vid start: - Inställningen för värdkonfiguration Exclude Assemblies vid startup: - public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.HostingStartupExcludeAssembliesKey, "{ASSEMBLY1;ASSEMBLY2; ...}") .UseStartup<Startup>(); });- Platshållaren - {ASSEMBLY1;ASSEMBLY2; ...}representerar den semikolonavgränsade listan över sammansättningar.
- ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIESmiljövariabel.
 
Om både värdkonfigurationsinställningen och miljövariabeln anges styr värdinställningen beteendet.
Om värdstartssammansättningar inaktiveras med hjälp av värdinställningen eller miljövariabeln inaktiveras sammansättningen globalt och kan inaktivera flera egenskaper för en app.
Project
Skapa ett webbhotellsföretag med någon av följande projekttyper:
Klassbibliotek
En startförbättring för värd kan tillhandahållas i ett klassbibliotek. Biblioteket innehåller ett HostingStartup attribut.
Exempelkoden innehåller en Razor Pages-app, HostingStartupApp och ett klassbibliotek, HostingStartupLibrary. Klassbiblioteket:
- Innehåller en värdstartsklass, ServiceKeyInjection, som implementerarIHostingStartup.ServiceKeyInjectionlägger till ett par tjänststrängar i appens konfiguration med hjälp av den minnesinterna konfigurationsprovidern (AddInMemoryCollection).
- Innehåller ett HostingStartupattribut som identifierar värdstartens namnrymd och klass.
Klassens ServiceKeyInjectionConfigure metod använder en IWebHostBuilder för att lägga till förbättringar i en app.
              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);
            });
        }
    }
}
Appens indexsida läser och återger konfigurationsvärdena för de två nycklar som angetts av klassbibliotekets värdstartssammansättning:
              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()
    {
    }
}
Exempelkoden innehåller också ett NuGet-paketprojekt som tillhandahåller en separat värdstart, HostingStartupPackage. Paketet har samma egenskaper som klassbiblioteket som beskrevs tidigare. Paketet:
- Innehåller en värdstartsklass, ServiceKeyInjection, som implementerarIHostingStartup.ServiceKeyInjectionlägger till ett par tjänststrängar i appens konfiguration.
- Innehåller ett HostingStartupattribut.
              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);
            });
        }
    }
}
Appens indexsida läser och återger konfigurationsvärdena för de två nycklar som anges av paketets värdstartssammansättning:
              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()
    {
    }
}
Konsolapp utan startpunkt
Den här metoden är endast tillgänglig för .NET-appar, inte .NET Framework.
En dynamisk startförbättring som inte kräver en kompileringstidsreferens för aktivering kan tillhandahållas i en konsolapp utan en startpunkt som innehåller ett HostingStartup attribut. När du publicerar konsolappen skapas en värdbaserad startsammansättning som kan användas från körningsarkivet.
En konsolapp utan startpunkt används i den här processen eftersom:
- En fil med beroenden krävs för att använda värdstartkomponenten i värdstartssammansättningen. En beroendefil är en körbar apptillgång som skapas genom att publicera en app, inte ett bibliotek.
- Det går inte att lägga till ett bibliotek direkt i runtime-paketarkivet, vilket kräver ett körbart projekt som riktar sig mot den delade körningen.
Vid skapandet av en dynamisk värdtjänst-startup
- En värd-startsammansättning skapas från konsolappen utan en startpunkt som: - Innehåller en klass som innehåller implementeringen IHostingStartup.
- Innehåller ett HostingStartup-attribut för att identifiera implementeringsklassen IHostingStartup.
 
- Innehåller en klass som innehåller implementeringen 
- Konsolappen publiceras för att hämta värdmiljöns beroenden. En följd av att du publicerar konsolappen är att oanvända beroenden trimmas från beroendefilen.
- Beroendefilen uppdateras för att ange körplatsen för den värdstartade assemblyn.
- Värdstartförsamlingen och dess beroendefil placeras i runtime-paketlagringen. För att identifiera värdstartssammansättningen och dess beroendefil visas de i ett par miljövariabler.
Konsolappen refererar till paketet 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>
Ett HostingStartup-attribut identifierar en klass som en implementering av IHostingStartup för inläsning och körning när du skapar IWebHost. I följande exempel är StartupEnhancementnamnområdet , och klassen är StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
En klass implementerar IHostingStartup. Klassens Configure metod använder en IWebHostBuilder för att lägga till förbättringar i en app. 
              IHostingStartup.Configure i värdstartssammansättningen anropas av körningen före Startup.Configure i användarkoden, vilket gör att användarkod kan skriva över alla konfigurationer som tillhandahålls av värdstartssammansättningen.
namespace StartupEnhancement
{
    public class StartupEnhancementHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            // Use the IWebHostBuilder to add app enhancements.
        }
    }
}
När du skapar ett IHostingStartup projekt anger .deps.json beroendefilen (runtime) platsen för sammansättningen till mappen bin:
"targets": {
  ".NETCoreApp,Version=v3.0": {
    "StartupEnhancement/1.0.0": {
      "dependencies": {
        "Microsoft.AspNetCore.Hosting.Abstractions": "3.0.0"
      },
      "runtime": {
        "StartupEnhancement.dll": {}
      }
    }
  }
}
Endast en del av filen visas. Sammansättningsnamnet i exemplet är StartupEnhancement.
Konfiguration som tillhandahålls av värdstarten
Det finns två sätt att hantera konfigurationen beroende på om du vill att värdstartens konfiguration ska ha företräde eller om appens konfiguration ska ha företräde:
- Ange konfiguration till appen med hjälp av ConfigureAppConfiguration för att läsa in konfigurationen efter att appens ConfigureAppConfiguration-delegater har exekverats. Att vara värd för startkonfigurationen prioriteras framför appens konfiguration med den här metoden.
- Ange konfiguration för appen genom UseConfiguration för att ladda konfigurationen innan appens ConfigureAppConfiguration delegeringar körs. Appens konfigurationsvärden har företräde framför de som tillhandahålls av värduppstarten med denna metod.
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);
    }
}
Ange värdstartssammansättningen
För antingen en klassbiblioteks- eller konsolapp som tillhandahålls som värdstart anger du namnet på värdstartssammansättningen i ASPNETCORE_HOSTINGSTARTUPASSEMBLIES miljövariabeln. Miljövariabeln är en semikolonavgränsad lista över sammansättningar.
Endast värdstartsammansättningar genomsöks efter attributet HostingStartup. För exempelappen HostingStartupApp, för att identifiera de värdstarter som beskrevs tidigare, anges miljövariabeln till följande värde:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
En värdstartsammansättning kan även konfigureras med värdinställningen Värdstartsammansättningar.
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseSetting(
                    WebHostDefaults.HostingStartupAssembliesKey, 
                    "{ASSEMBLY1;ASSEMBLY2; ...}")
                .UseStartup<Startup>();
        });
Platshållaren {ASSEMBLY1;ASSEMBLY2; ...} representerar den semikolonavgränsade listan över sammansättningar.
När det finns flera startsammansättningar för värdar körs deras Configure metoder i den ordning som sammansättningarna visas.
Activation
Alternativ för att vara värd för startaktivering är:
- Körningsarkiv: Aktivering kräver ingen kompileringstidreferens för aktivering. Exempelappen placerar värdstartssammansättningen och beroendefilerna i en mapp, distribution, för att underlätta distributionen av värdstarten i en multimachine-miljö. Distributionsmappen innehåller också ett PowerShell-skript som skapar eller ändrar miljövariabler i distributionssystemet för att aktivera värdstarten.
- Kompileringstidsreferens krävs för aktivering
Körningstidslagring
Implementeringen av hosting-startup placeras i runtime-lager. En kompileringstidsreferens till sammansättningen krävs inte av den förbättrade appen.
När värdstarten har skapats genereras ett körningslager med hjälp av manifestprojektfilen och kommandot dotnet store .
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
I exempelappen (RuntimeStore-projektet ) används följande kommando:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
För att körmiljön ska upptäcka körningsarkivet tillfogas platsen för körningsarkivet till DOTNET_SHARED_STORE-miljövariabeln.
Ändra och placera värdföretagets beroendefil
Om du vill aktivera förbättringen utan en paketreferens till förbättringen anger du ytterligare beroenden till körningen med additionalDeps. 
              additionalDeps gör att du kan:
- Utöka appens biblioteksgraf genom att tillhandahålla en uppsättning ytterligare .deps.jsonfiler som ska sammanfogas med appens egen.deps.jsonfil vid start.
- Gör värdstartssammansättningen identifierbar och läsbar.
Den rekommenderade metoden för att generera ytterligare beroenden är att:
- Kör dotnet publishpå manifestfilen för körningstidens lagring som omnämndes i föregående avsnitt.
- Ta bort manifestreferensen från biblioteken och runtime-avsnittet i den resulterande.deps.json-filen.
I exempelprojektet tas egenskapen store.manifest/1.0.0 bort från targets avsnittet och 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"
    }
  }
}
Placera .deps.json filen på följande plats:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
- 
              {ADDITIONAL DEPENDENCIES PATH}: Plats som lagts till iDOTNET_ADDITIONAL_DEPSmiljövariabeln.
- 
              {SHARED FRAMEWORK NAME}: Delat ramverk som krävs för den här ytterligare beroendefilen.
- 
              {SHARED FRAMEWORK VERSION}: Lägsta version av delat ramverk.
- 
              {ENHANCEMENT ASSEMBLY NAME}: Förbättringens sammansättningsnamn.
I exempelappen (RuntimeStore-projektet ) placeras den ytterligare beroendefilen på följande plats:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/3.0.0/StartupDiagnostics.deps.json
För att runtime ska kunna upptäcka platsen för runtime-lagringen läggs platsen för den ytterligare beroendefilen till i DOTNET_ADDITIONAL_DEPS miljövariabeln.
Note
Miljövariabeln DOTNET_ADDITIONAL_DEPS fungerar bara med ramverksberoende program. Den här miljövariabeln ignoreras för fristående program.
I exempelapplikationen (RuntimeStore-projektet) byggs körningsarkivet och den ytterligare beroendefilen genereras med hjälp av ett PowerShell-skript.
Exempel på hur du anger miljövariabler för olika operativsystem finns i Använda flera miljöer.
Deployment
För att underlätta distributionen av en värdtjänst i en multimaskinmiljö skapar exempelapplikationen en distributionsmapp i de publicerade utdata som innehåller:
- Lagringsplats för värdmiljöns startkörning.
- Filen med beroenden för värdstart.
- Ett PowerShell-skript som skapar eller ändrar ASPNETCORE_HOSTINGSTARTUPASSEMBLIES,DOTNET_SHARED_STOREochDOTNET_ADDITIONAL_DEPSsom stöder aktivering av värdstarten. Kör skriptet från en administrativ PowerShell-kommandotolk i distributionssystemet.
NuGet-paket
En förbättring för en hosting-startup kan tillhandahållas i ett NuGet-paket. Paketet har ett HostingStartup attribut. Typer av värdstart som tillhandahålls av paketet görs tillgängliga för appen genom någon av följande metoder:
- Den förbättrade appens projektfil innefattar en paketreferens för startprogrammets uppstart i värdprojektet (en kompileringstidsreferens). Med kompileringstidsreferensen på plats införlivas värdstartssammansättningen och alla dess beroenden i appens beroendefil (.deps.json). Den här metoden gäller för ett uppstartspaket för hosting som publicerats till nuget.org.
- Värdföretagets beroendefil görs tillgänglig för den förbättrade appen enligt beskrivningen i avsnittet Runtime Store (utan en kompileringsreferens).
Mer information om NuGet-paket och runtime store finns i följande avsnitt:
Mapp för projektlager
En värdförbättring för start kan tillhandahållas av en bin-distribuerad sammansättning i den förbättrade appen. Typer av värdkonfiguration som tillhandahålls av assemblaget görs tillgängliga för appen med någon av följande metoder:
- Den förbättrade appens projektfil gör en assemblingsreferens till värdprogramstarten (en referens vid kompileringstid). Med kompileringstidsreferensen på plats införlivas värdstartssammansättningen och alla dess beroenden i appens beroendefil (.deps.json). Den här metoden gäller när distributionsscenariot kräver att man gör en kompileringstidsreferens till värdstartens assembly (.dll-filen) och flyttar assemblyn till något av följande:- Det tidskrävande projektet.
- En plats som är åtkomstbar för det konsumerande projektet.
 
- Värdföretagets beroendefil görs tillgänglig för den förbättrade appen enligt beskrivningen i avsnittet Runtime Store (utan en kompileringsreferens).
- När du riktar in dig på .NET Framework kan sammansättningen läsas in i standardinläsningskontexten, vilket i .NET Framework innebär att sammansättningen finns på någon av följande platser: - Programbassökväg: Den bin-mapp där appens körbara (.exe) finns.
- Global Assembly Cache (GAC): GAC lagrar sammansättningar som flera .NET Framework-appar delar. Mer information finns i Så här installerar du en sammansättning i den globala sammansättningscachen i .NET Framework-dokumentationen.
 
Exempelkod
Exempelkoden (hur du laddar ned) visar hur du hanterar scenarier för startimplementering:
- Två värdstartssammansättningar (klassbibliotek) anger ett par nyckel/värde-par för minnesintern konfiguration: - NuGet-paket (HostingStartupPackage)
- Klassbibliotek (HostingStartupLibrary)
 
- En hosting-startup aktiveras från ett körbutik-distribuerat bibliotek (StartupDiagnostics). Sammansättningen lägger till två mellanprogram i appen vid start som ger diagnostikinformation om: - Registrerade tjänster
- Adress (schema, värd, sökvägsbas, sökväg, frågesträng)
- Anslutning (fjärr-IP, fjärrport, lokal IP, lokal port, klientcertifikat)
- Förfrågningsrubriker
- Miljövariabler
 
Så här kör du exemplet:
Aktivering från ett NuGet-paket
- Kompilera HostingStartupPackage-paketet med kommandot dotnet pack . 
- Lägg till paketets sammansättningsnamn för HostingStartupPackage i - ASPNETCORE_HOSTINGSTARTUPASSEMBLIESmiljövariabeln.
- Kompilera och kör appen. En paketreferens finns i den förbättrade appen (en kompileringsreferens). A - <PropertyGroup>i appens projektfil anger paketprojektets utdata (.. /HostingStartupPackage/bin/Debug) som paketkälla. På så sätt kan appen använda paketet utan att ladda upp paketet till nuget.org. Mer information finns i anteckningarna i Projektfilen för HostingStartupApp.- <PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
- Observera att värdena för tjänstkonfigurationsnyckeln som återges av sidan Index matchar de värden som anges av paketets - ServiceKeyInjection.Configuremetod.
Om du gör ändringar i HostingStartupPackage-projektet och kompilerar det igen rensar du de lokala NuGet-paketcacheminnena för att säkerställa att HostingStartupApp tar emot det uppdaterade paketet och inte ett inaktuellt paket från den lokala cachen. Om du vill rensa de lokala NuGet-cacheminnena kör du följande dotnet nuget locals-kommando :
dotnet nuget locals all --clear
Aktivering från ett klassbibliotek
- Kompilera klassbiblioteket HostingStartupLibrary med kommandot dotnet build . 
- Lägg till klassbibliotekets sammansättningsnamn HostingStartupLibrary i - ASPNETCORE_HOSTINGSTARTUPASSEMBLIESmiljövariabeln.
- Bin-distribuera klassbibliotekets assembly till appen genom att kopiera filen HostingStartupLibrary.dll från klassbibliotekets kompilerade utdata till appens mapp bin/Debug. 
- Kompilera och kör appen. En - <ItemGroup>i appens projektfil refererar till klassbibliotekets sammansättning (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) (en kompileringstidsreferens). Mer information finns i anteckningarna i Projektfilen för HostingStartupApp.- <ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
- Observera att värdena för tjänstkonfigurationsnyckeln som återges av sidan Index matchar de värden som anges av klassbibliotekets - ServiceKeyInjection.Configuremetod.
Aktivering från en runtime store-distribuerad assembly
- 
              StartupDiagnostics-projektet använder PowerShell för att ändra filenStartupDiagnostics.deps.json. PowerShell installeras som standard i Windows från och med Windows 7 SP1 och Windows Server 2008 R2 SP1. Information om hur du hämtar PowerShell på andra plattformar finns i Installera olika versioner av PowerShell.
- Kör build.ps1 skriptet i mappen RuntimeStore . Skriptet: - Genererar StartupDiagnosticspaketet i mappen obj\packages .
- Genererar körningsarkivet för StartupDiagnosticsi store-mappen . Kommandotdotnet storei skriptet använderwin7-x64körningsidentifieraren (RID) för en värdstart som distribueras till Windows. När du tillhandahåller hostingstartup för en annan körtid, ersätt det korrekta RID på rad 37 i skriptet. Körningsarkivet förStartupDiagnosticsskulle senare flyttas till användarens eller systemets körningsarkiv på den dator där assembly kommer att användas. Installationsplatsen för användarens runtime-lagringStartupDiagnosticsför assemblyn är .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll.
- Genererar additionalDepsförStartupDiagnosticsi mappen additionalDeps . De ytterligare beroendena skulle senare flyttas till användarens eller systemets ytterligare beroenden. Installationsplatsen för användarensStartupDiagnosticsytterligare beroenden är.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json.
- Placerar filen deploy.ps1 i distributionsmappen.
 
- Genererar 
- Kör deploy.ps1 skriptet i deploy-mappen. Skriptet lägger till: - 
              StartupDiagnosticstillASPNETCORE_HOSTINGSTARTUPASSEMBLIES-miljövariabeln.
- Sökvägen för värdstartsberoenden (i distributionsmappen för RuntimeStore-projektet) till DOTNET_ADDITIONAL_DEPSmiljövariabeln.
- Sökvägen för körningstidens lagringsplats (i distributionsmappen för RuntimeStore-projektet) till miljövariabeln DOTNET_SHARED_STORE.
 
- 
              
- Kör exempelappen.
- Anropa /services-slutpunkten för att se appens registrerade tjänster. Begär/diag-slutpunkten för att se diagnostikinformationen.
En IHostingStartup (värdbaserad startup) implementering lägger till förbättringar i en app vid programstart från en extern samling. Ett externt bibliotek kan till exempel använda en host-startup-implementering för att tillhandahålla ytterligare konfigurationsleverantörer eller tjänster till en app.
Visa eller ladda ned exempelkod (hur du laddar ned)
HostingStartup-attribut
Ett HostingStartup-attribut anger förekomsten av en värdmiljö-startmontering som ska aktiveras vid körning.
Inmatningssammansättningen eller sammansättningen med Startup klassen genomsöks automatiskt efter attributet HostingStartup. Listan över sammansättningar i vilka HostingStartup attribut ska sökas läses in vid körning från konfigurationen i WebHostDefaults.HostingStartupAssembliesKey. Listan över sammansättningar som ska undantas från identifiering läses in från WebHostDefaults.HostingStartupExcludeAssembliesKey. Mer information finns i Web Host: Hosting Startup Assemblies och Web Host: Hosting Startup Exclude Assemblies.
I följande exempel är namnområdet för värdsammansättningen av startprogrammet StartupEnhancement. Klassen som innehåller värdstartkoden är StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Attributet HostingStartup finns vanligtvis i implementeringsklassfilen IHostingStartup för värdstartsammanställningen.
Identifiera inlästa startsammansättningar för värd
Om du vill identifiera inlästa startsammansättningar för värdtjänster aktiverar du loggning och kontrollerar appens loggar. Fel som uppstår vid inläsning av sammansättningar loggas. Inlästa värdstartssammansättningar loggas på felsökningsnivå och alla fel loggas.
Inaktivera automatisk inläsning av värdstartssammansättningar
Om du vill inaktivera automatisk inläsning av värdstartssammansättningar använder du någon av följande metoder:
- Om du vill förhindra att alla värdstartsammansättningar läses in anger du något av följande till trueeller1:- Förhindra inställningen för värdtjänststartup
- 
              ASPNETCORE_PREVENTHOSTINGSTARTUPmiljövariabel.
 
- Om du vill förhindra att specifika startsammansättningar för värdtjänster läses in anger du något av följande till en semikolonavgränsad sträng som är värd för startsammansättningar som ska undantas vid start: - Värdkonfigurationsinställningen för start: Exkludera sammansättningar
- 
              ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIESmiljövariabel.
 
Om både värdkonfigurationsinställningen och miljövariabeln anges styr värdinställningen beteendet.
Om värdstartssammansättningar inaktiveras med hjälp av värdinställningen eller miljövariabeln inaktiveras sammansättningen globalt och kan inaktivera flera egenskaper för en app.
Project
Skapa ett webbhotellsföretag med någon av följande projekttyper:
Klassbibliotek
En startförbättring för värd kan tillhandahållas i ett klassbibliotek. Biblioteket innehåller ett HostingStartup attribut.
Exempelkoden innehåller en Razor Pages-app, HostingStartupApp och ett klassbibliotek, HostingStartupLibrary. Klassbiblioteket:
- Innehåller en värdstartsklass, ServiceKeyInjection, som implementerarIHostingStartup.ServiceKeyInjectionlägger till ett par tjänststrängar i appens konfiguration med hjälp av den minnesinterna konfigurationsprovidern (AddInMemoryCollection).
- Innehåller ett HostingStartupattribut som identifierar värdstartens namnrymd och klass.
Klassens ServiceKeyInjectionConfigure metod använder en IWebHostBuilder för att lägga till förbättringar i en app.
              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);
            });
        }
    }
}
Appens indexsida läser och återger konfigurationsvärdena för de två nycklar som angetts av klassbibliotekets värdstartssammansättning:
              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()
    {
    }
}
Exempelkoden innehåller också ett NuGet-paketprojekt som tillhandahåller en separat värdstart, HostingStartupPackage. Paketet har samma egenskaper som klassbiblioteket som beskrevs tidigare. Paketet:
- Innehåller en värdstartsklass, ServiceKeyInjection, som implementerarIHostingStartup.ServiceKeyInjectionlägger till ett par tjänststrängar i appens konfiguration.
- Innehåller ett HostingStartupattribut.
              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);
            });
        }
    }
}
Appens indexsida läser och återger konfigurationsvärdena för de två nycklar som anges av paketets värdstartssammansättning:
              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()
    {
    }
}
Konsolapp utan startpunkt
Den här metoden är endast tillgänglig för .NET-appar, inte .NET Framework.
En dynamisk startförbättring som inte kräver en kompileringstidsreferens för aktivering kan tillhandahållas i en konsolapp utan en startpunkt som innehåller ett HostingStartup attribut. När du publicerar konsolappen skapas en värdbaserad startsammansättning som kan användas från körningsarkivet.
En konsolapp utan startpunkt används i den här processen eftersom:
- En fil med beroenden krävs för att använda värdstartkomponenten i värdstartssammansättningen. En beroendefil är en körbar apptillgång som skapas genom att publicera en app, inte ett bibliotek.
- Det går inte att lägga till ett bibliotek direkt i runtime-paketarkivet, vilket kräver ett körbart projekt som riktar sig mot den delade körningen.
Vid skapandet av en dynamisk värdtjänst-startup
- En värd-startsammansättning skapas från konsolappen utan en startpunkt som: - Innehåller en klass som innehåller implementeringen IHostingStartup.
- Innehåller ett HostingStartup-attribut för att identifiera implementeringsklassen IHostingStartup.
 
- Innehåller en klass som innehåller implementeringen 
- Konsolappen publiceras för att hämta värdmiljöns beroenden. En följd av att du publicerar konsolappen är att oanvända beroenden trimmas från beroendefilen.
- Beroendefilen uppdateras för att ange körplatsen för den värdstartade assemblyn.
- Värdstartförsamlingen och dess beroendefil placeras i runtime-paketlagringen. För att identifiera värdstartssammansättningen och dess beroendefil visas de i ett par miljövariabler.
Konsolappen refererar till paketet 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>
Ett HostingStartup-attribut identifierar en klass som en implementering av IHostingStartup för inläsning och körning när du skapar IWebHost. I följande exempel är StartupEnhancementnamnområdet , och klassen är StartupEnhancementHostingStartup:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
En klass implementerar IHostingStartup. Klassens Configure metod använder en IWebHostBuilder för att lägga till förbättringar i en app. 
              IHostingStartup.Configure i värdstartssammansättningen anropas av körningen före Startup.Configure i användarkoden, vilket gör att användarkod kan skriva över alla konfigurationer som tillhandahålls av värdstartssammansättningen.
namespace StartupEnhancement
{
    public class StartupEnhancementHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            // Use the IWebHostBuilder to add app enhancements.
        }
    }
}
När du skapar ett IHostingStartup projekt anger .deps.json beroendefilen (runtime) platsen för sammansättningen till mappen bin:
"targets": {
  ".NETCoreApp,Version=v2.1": {
    "StartupEnhancement/1.0.0": {
      "dependencies": {
        "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1"
      },
      "runtime": {
        "StartupEnhancement.dll": {}
      }
    }
  }
}
Endast en del av filen visas. Sammansättningsnamnet i exemplet är StartupEnhancement.
Konfiguration som tillhandahålls av värdstarten
Det finns två sätt att hantera konfigurationen beroende på om du vill att värdstartens konfiguration ska ha företräde eller om appens konfiguration ska ha företräde:
- Ange konfiguration till appen med hjälp av ConfigureAppConfiguration för att läsa in konfigurationen efter att appens ConfigureAppConfiguration-delegater har exekverats. Att vara värd för startkonfigurationen prioriteras framför appens konfiguration med den här metoden.
- Ange konfiguration för appen genom UseConfiguration för att ladda konfigurationen innan appens ConfigureAppConfiguration delegeringar körs. Appens konfigurationsvärden har företräde framför de som tillhandahålls av värduppstarten med denna metod.
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);
    }
}
Ange värdstartssammansättningen
För antingen en klassbiblioteks- eller konsolapp som tillhandahålls som värdstart anger du namnet på värdstartssammansättningen i ASPNETCORE_HOSTINGSTARTUPASSEMBLIES miljövariabeln. Miljövariabeln är en semikolonavgränsad lista över sammansättningar.
Endast värdstartsammansättningar genomsöks efter attributet HostingStartup. För exempelappen HostingStartupApp, för att identifiera de värdstarter som beskrevs tidigare, anges miljövariabeln till följande värde:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
En "hosting startup assembly" kan också konfigureras med hjälp av värdkonfigurationen för "Hosting Startup Assemblies".
När det finns flera startsammansättningar för värdar körs deras Configure metoder i den ordning som sammansättningarna visas.
Activation
Alternativ för att vara värd för startaktivering är:
- Körningsarkiv: Aktivering kräver ingen kompileringstidreferens för aktivering. Exempelappen placerar värdstartssammansättningen och beroendefilerna i en mapp, distribution, för att underlätta distributionen av värdstarten i en multimachine-miljö. Distributionsmappen innehåller också ett PowerShell-skript som skapar eller ändrar miljövariabler i distributionssystemet för att aktivera värdstarten.
- Kompileringstidsreferens krävs för aktivering
Körningstidslagring
Implementeringen av hosting-startup placeras i runtime-lager. En kompileringstidsreferens till sammansättningen krävs inte av den förbättrade appen.
När värdstarten har skapats genereras ett körningslager med hjälp av manifestprojektfilen och kommandot dotnet store .
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
I exempelappen (RuntimeStore-projektet ) används följande kommando:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
För att körmiljön ska upptäcka körningsarkivet tillfogas platsen för körningsarkivet till DOTNET_SHARED_STORE-miljövariabeln.
Ändra och placera värdföretagets beroendefil
Om du vill aktivera förbättringen utan en paketreferens till förbättringen anger du ytterligare beroenden till körningen med additionalDeps. 
              additionalDeps gör att du kan:
- Utöka appens biblioteksgraf genom att tillhandahålla en uppsättning ytterligare .deps.jsonfiler som ska sammanfogas med appens egen.deps.jsonfil vid start.
- Gör värdstartssammansättningen identifierbar och läsbar.
Den rekommenderade metoden för att generera ytterligare beroenden är att:
- Kör dotnet publishpå manifestfilen för körningstidens lagring som omnämndes i föregående avsnitt.
- Ta bort manifestreferensen från biblioteken och runtime-avsnittet i den resulterande.deps.json-filen.
I exempelprojektet tas egenskapen store.manifest/1.0.0 bort från targets avsnittet och 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"
    }
  }
}
Placera .deps.json filen på följande plats:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
- 
              {ADDITIONAL DEPENDENCIES PATH}: Plats som lagts till iDOTNET_ADDITIONAL_DEPSmiljövariabeln.
- 
              {SHARED FRAMEWORK NAME}: Delat ramverk som krävs för den här ytterligare beroendefilen.
- 
              {SHARED FRAMEWORK VERSION}: Lägsta version av delat ramverk.
- 
              {ENHANCEMENT ASSEMBLY NAME}: Förbättringens sammansättningsnamn.
I exempelappen (RuntimeStore-projektet ) placeras den ytterligare beroendefilen på följande plats:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/2.1.0/StartupDiagnostics.deps.json
För att runtime ska kunna upptäcka platsen för runtime-lagringen läggs platsen för den ytterligare beroendefilen till i DOTNET_ADDITIONAL_DEPS miljövariabeln.
Note
Miljövariabeln DOTNET_ADDITIONAL_DEPS fungerar bara med ramverksberoende program. Den här miljövariabeln ignoreras för fristående program.
I exempelapplikationen (RuntimeStore-projektet) byggs körningsarkivet och den ytterligare beroendefilen genereras med hjälp av ett PowerShell-skript.
Exempel på hur du anger miljövariabler för olika operativsystem finns i Använda flera miljöer.
Deployment
För att underlätta distributionen av en värdtjänst i en multimaskinmiljö skapar exempelapplikationen en distributionsmapp i de publicerade utdata som innehåller:
- Lagringsplats för värdmiljöns startkörning.
- Filen med beroenden för värdstart.
- Ett PowerShell-skript som skapar eller ändrar ASPNETCORE_HOSTINGSTARTUPASSEMBLIES,DOTNET_SHARED_STOREochDOTNET_ADDITIONAL_DEPSsom stöder aktivering av värdstarten. Kör skriptet från en administrativ PowerShell-kommandotolk i distributionssystemet.
NuGet-paket
En förbättring för en hosting-startup kan tillhandahållas i ett NuGet-paket. Paketet har ett HostingStartup attribut. Typer av värdstart som tillhandahålls av paketet görs tillgängliga för appen genom någon av följande metoder:
- Den förbättrade appens projektfil innefattar en paketreferens för startprogrammets uppstart i värdprojektet (en kompileringstidsreferens). Med kompileringstidsreferensen på plats införlivas värdstartssammansättningen och alla dess beroenden i appens beroendefil (.deps.json). Den här metoden gäller för ett uppstartspaket för hosting som publicerats till nuget.org.
- Värdföretagets beroendefil görs tillgänglig för den förbättrade appen enligt beskrivningen i avsnittet Runtime Store (utan en kompileringsreferens).
Mer information om NuGet-paket och runtime store finns i följande avsnitt:
Mapp för projektlager
En värdförbättring för start kan tillhandahållas av en bin-distribuerad sammansättning i den förbättrade appen. Typer av värdkonfiguration som tillhandahålls av assemblaget görs tillgängliga för appen med någon av följande metoder:
- Den förbättrade appens projektfil gör en assemblingsreferens till värdprogramstarten (en referens vid kompileringstid). Med kompileringstidsreferensen på plats införlivas värdstartssammansättningen och alla dess beroenden i appens beroendefil (.deps.json). Den här metoden gäller när distributionsscenariot kräver att man gör en kompileringstidsreferens till värdstartens assembly (.dll-filen) och flyttar assemblyn till något av följande:- Det tidskrävande projektet.
- En plats som är åtkomstbar för det konsumerande projektet.
 
- Värdföretagets beroendefil görs tillgänglig för den förbättrade appen enligt beskrivningen i avsnittet Runtime Store (utan en kompileringsreferens).
- När du riktar in dig på .NET Framework kan sammansättningen läsas in i standardinläsningskontexten, vilket i .NET Framework innebär att sammansättningen finns på någon av följande platser: - Programbassökväg: Den bin-mapp där appens körbara (.exe) finns.
- Global Assembly Cache (GAC): GAC lagrar sammansättningar som flera .NET Framework-appar delar. Mer information finns i Så här installerar du en sammansättning i den globala sammansättningscachen i .NET Framework-dokumentationen.
 
Exempelkod
Exempelkoden (hur du laddar ned) visar hur du hanterar scenarier för startimplementering:
- Två värdstartssammansättningar (klassbibliotek) anger ett par nyckel/värde-par för minnesintern konfiguration: - NuGet-paket (HostingStartupPackage)
- Klassbibliotek (HostingStartupLibrary)
 
- En hosting-startup aktiveras från ett körbutik-distribuerat bibliotek (StartupDiagnostics). Sammansättningen lägger till två mellanprogram i appen vid start som ger diagnostikinformation om: - Registrerade tjänster
- Adress (schema, värd, sökvägsbas, sökväg, frågesträng)
- Anslutning (fjärr-IP, fjärrport, lokal IP, lokal port, klientcertifikat)
- Förfrågningsrubriker
- Miljövariabler
 
Så här kör du exemplet:
Aktivering från ett NuGet-paket
- Kompilera HostingStartupPackage-paketet med kommandot dotnet pack . 
- Lägg till paketets sammansättningsnamn för HostingStartupPackage i - ASPNETCORE_HOSTINGSTARTUPASSEMBLIESmiljövariabeln.
- Kompilera och kör appen. En paketreferens finns i den förbättrade appen (en kompileringsreferens). A - <PropertyGroup>i appens projektfil anger paketprojektets utdata (.. /HostingStartupPackage/bin/Debug) som paketkälla. På så sätt kan appen använda paketet utan att ladda upp paketet till nuget.org. Mer information finns i anteckningarna i Projektfilen för HostingStartupApp.- <PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
- Observera att värdena för tjänstkonfigurationsnyckeln som återges av sidan Index matchar de värden som anges av paketets - ServiceKeyInjection.Configuremetod.
Om du gör ändringar i HostingStartupPackage-projektet och kompilerar det igen rensar du de lokala NuGet-paketcacheminnena för att säkerställa att HostingStartupApp tar emot det uppdaterade paketet och inte ett inaktuellt paket från den lokala cachen. Om du vill rensa de lokala NuGet-cacheminnena kör du följande dotnet nuget locals-kommando :
dotnet nuget locals all --clear
Aktivering från ett klassbibliotek
- Kompilera klassbiblioteket HostingStartupLibrary med kommandot dotnet build . 
- Lägg till klassbibliotekets sammansättningsnamn HostingStartupLibrary i - ASPNETCORE_HOSTINGSTARTUPASSEMBLIESmiljövariabeln.
- Bin-distribuera klassbibliotekets assembly till appen genom att kopiera filen HostingStartupLibrary.dll från klassbibliotekets kompilerade utdata till appens mapp bin/Debug. 
- Kompilera och kör appen. En - <ItemGroup>i appens projektfil refererar till klassbibliotekets sammansättning (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) (en kompileringstidsreferens). Mer information finns i anteckningarna i Projektfilen för HostingStartupApp.- <ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
- Observera att värdena för tjänstkonfigurationsnyckeln som återges av sidan Index matchar de värden som anges av klassbibliotekets - ServiceKeyInjection.Configuremetod.
Aktivering från en runtime store-distribuerad assembly
- 
              StartupDiagnostics-projektet använder PowerShell för att ändra filenStartupDiagnostics.deps.json. PowerShell installeras som standard i Windows från och med Windows 7 SP1 och Windows Server 2008 R2 SP1. Information om hur du hämtar PowerShell på andra plattformar finns i Installera olika versioner av PowerShell.
- Kör build.ps1 skriptet i mappen RuntimeStore . Skriptet: - Genererar StartupDiagnosticspaketet i mappen obj\packages .
- Genererar körningsarkivet för StartupDiagnosticsi store-mappen . Kommandotdotnet storei skriptet använderwin7-x64körningsidentifieraren (RID) för en värdstart som distribueras till Windows. När du tillhandahåller hostingstartup för en annan körtid, ersätt det korrekta RID på rad 37 i skriptet. Körningsarkivet förStartupDiagnosticsskulle senare flyttas till användarens eller systemets körningsarkiv på den dator där assembly kommer att användas. Installationsplatsen för användarkörningsarkivetStartupDiagnosticsför sammansättningen är .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll.
- Genererar additionalDepsförStartupDiagnosticsi mappen additionalDeps . De ytterligare beroendena skulle senare flyttas till användarens eller systemets ytterligare beroenden. Installationsplatsen för användarensStartupDiagnosticsytterligare beroenden är.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json.
- Placerar filen deploy.ps1 i distributionsmappen.
 
- Genererar 
- Kör deploy.ps1 skriptet i deploy-mappen. Skriptet lägger till: - 
              StartupDiagnosticstillASPNETCORE_HOSTINGSTARTUPASSEMBLIES-miljövariabeln.
- Sökvägen för värdstartsberoenden (i distributionsmappen för RuntimeStore-projektet) till DOTNET_ADDITIONAL_DEPSmiljövariabeln.
- Sökvägen för körningstidens lagringsplats (i distributionsmappen för RuntimeStore-projektet) till miljövariabeln DOTNET_SHARED_STORE.
 
- 
              
- Kör exempelappen.
- Anropa /services-slutpunkten för att se appens registrerade tjänster. Begär/diag-slutpunkten för att se diagnostikinformationen.
ASP.NET Core