Megosztás a következőn keresztül:


Indítási szerelvények üzemeltetése a ASP.NET Core-ban

Note

Ez nem a cikk legújabb verziója. Az aktuális kiadásról a cikk .NET 10-es verziójában olvashat.

Warning

A ASP.NET Core ezen verziója már nem támogatott. További információt a .NET és a .NET Core támogatási szabályzatában talál. A jelen cikk .NET 9-es verzióját lásd az aktuális kiadásért .

Készítette: Pavel Krymets

Egy IHostingStartup (hosting indítási környezet) implementáció fejlesztéseket ad hozzá egy alkalmazáshoz indításkor egy külső könyvtárból. Egy külső könyvtár például is képes tárhelyindítási implementáció segítségével további konfigurációs szolgáltatókat és szolgáltatásokat biztosítani egy alkalmazásnak.

Mintakód megtekintése vagy letöltése (hogyan töltsd le)

HostingStartup attribútum

A HostingStartup attribútum egy üzemeltetési indítási szerelvény jelenlétét jelzi, amely futásidőben aktiválódik.

A rendszer automatikusan ellenőrzi az Startup attribútumra nézve a HostingStartup osztályt tartalmazó belépési szerelvényt vagy szerelvényt. Az attribútumok kereséséhez HostingStartup szükséges szerelvények listája futásidőben töltődik be a WebHostDefaults.HostingStartupAssembliesKey konfigurációjából. A felderítésből kizárandó szerelvények listája a WebHostDefaults.HostingStartupExcludeAssembliesKey fájlból töltődik be.

A következő példában az üzemeltető indító assembly névtere: StartupEnhancement. Az üzemeltetési indítási kódot tartalmazó osztály a következő StartupEnhancementHostingStartup:

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

Az HostingStartup attribútum általában a hosztoló indítószerelvény implementációs osztályfájljában található IHostingStartup.

A betöltött hoszting indítások összeállításainak felfedezése

A betöltött hosting indítási összeállítások felderítéséhez engedélyezze a naplózást, és ellenőrizze az alkalmazás naplóit. A rendszer a szerelvények betöltésekor előforduló hibákat naplózza. A betöltött indulási összetevők a Debug szinten vannak naplózva, és minden hibát naplóznak.

Hosztoló indítási összetevők automatikus betöltésének letiltása

Az indítási összetevők automatikus betöltésének letiltásához használja az alábbi módszerek egyikét:

  • Ha meg szeretné akadályozni, hogy az összes hosztolt indítási összeállítás betöltődjön, állítsa az alábbiak egyikét a következőre true vagy 1:

    • Az tárhelyszolgáltatás indítási konfigurációs beállításainak megelőzése:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
          Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseSetting(
                          WebHostDefaults.PreventHostingStartupKey, "true")
                      .UseStartup<Startup>();
              });
      
    • ASPNETCORE_PREVENTHOSTINGSTARTUP környezeti változó.

  • Ha meg szeretné akadályozni, hogy bizonyos üzemeltetési indítási szerelvények betöltődjenek, érdemes beállítani az alábbiak egyikét pontosvesszővel tagolt, indításkor kizárandó üzemeltetési indítási szerelvények listájára:

    • A hoszt konfigurációs beállításaival kizárható összeállítások az indításkor:

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

      A {ASSEMBLY1;ASSEMBLY2; ...} helyettesítő a szerelvények pontosvesszővel tagolt listáját jelöli.

    • ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES környezeti változó.

Ha a gazdagép konfigurációs beállítása és a környezeti változó is be van állítva, a gazdabeállítás szabályozza a viselkedést.

Ha letiltja az indítási szerelvények üzemeltetését a gazdagépbeállítás vagy a környezeti változó használatával, az globálisan letiltja a szerelvényt, és az alkalmazás több jellemzőjét is letilthatja.

Project

Hozzon létre egy üzemeltetési indítást az alábbi projekttípusok valamelyikével:

Osztálytár

Egy hosting szolgáltatás fejlesztése egy osztálykönyvtárban is elérhető. A kódtár tartalmaz egy HostingStartup attribútumot.

A mintakód tartalmaz egy Pages-alkalmazást, a RazorHostingStartupAppot és egy osztálytárat, a HostingStartupLibraryt. Az osztálykódtár:

  • Egy hostindító osztályt tartalmaz, ServiceKeyInjection, amely implementálja az IHostingStartup-t. ServiceKeyInjection Egy pár szolgáltatáskódot ad hozzá az alkalmazás konfigurációjához a memóriában tárolt konfigurációs szolgáltató (AddInMemoryCollection) használatával.
  • Tartalmaz egy HostingStartup attribútumot, amely azonosítja az üzemeltető startup névterét és osztályát.

Az ServiceKeyInjection osztály Configure metódusa IWebHostBuilder továbbfejlesztéseket ad egy alkalmazáshoz.

HostingStartupLibrary/ServiceKeyInjection.cs:

[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]

namespace HostingStartupLibrary
{
    public class ServiceKeyInjection : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureAppConfiguration(config =>
            {
                var dict = new Dictionary<string, string>
                {
                    {"DevAccount_FromLibrary", "DEV_1111111-1111"},
                    {"ProdAccount_FromLibrary", "PROD_2222222-2222"}
                };

                config.AddInMemoryCollection(dict);
            });
        }
    }
}

Az alkalmazás indexoldala beolvassa és megjeleníti az osztálytár indítási szerelvénye által beállított két kulcs konfigurációs értékeit:

HostingStartupApp/Pages/Index.cshtml.cs:

public class IndexModel : PageModel
{
    public IndexModel(IConfiguration config)
    {
        ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
        ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
        ServiceKey_Development_Package = config["DevAccount_FromPackage"];
        ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
    }

    public string ServiceKey_Development_Library { get; private set; }
    public string ServiceKey_Production_Library { get; private set; }
    public string ServiceKey_Development_Package { get; private set; }
    public string ServiceKey_Production_Package { get; private set; }

    public void OnGet()
    {
    }
}

A mintakód tartalmaz egy NuGet-csomagprojektet is, amely egy különálló üzemeltetési indítást, a HostingStartupPackage-t biztosít. A csomag jellemzői megegyeznek a korábban ismertetett osztálykódtár jellemzőivel. A csomag:

  • Egy hostindító osztályt tartalmaz, ServiceKeyInjection, amely implementálja az IHostingStartup-t. ServiceKeyInjection hozzáad egy pár szolgáltatási sztringet az alkalmazás konfigurációjához.
  • Tartalmaz egy HostingStartup attribútumot.

HostingStartupPackage/ServiceKeyInjection.cs:

[assembly: HostingStartup(typeof(HostingStartupPackage.ServiceKeyInjection))]

namespace HostingStartupPackage
{
    public class ServiceKeyInjection : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureAppConfiguration(config =>
            {
                var dict = new Dictionary<string, string>
                {
                    {"DevAccount_FromPackage", "DEV_3333333-3333"},
                    {"ProdAccount_FromPackage", "PROD_4444444-4444"}
                };

                config.AddInMemoryCollection(dict);
            });
        }
    }
}

Az alkalmazás indexoldala beolvassa és megjeleníti a csomag üzemeltetési indítási szerelvénye által beállított két kulcs konfigurációs értékeit:

HostingStartupApp/Pages/Index.cshtml.cs:

public class IndexModel : PageModel
{
    public IndexModel(IConfiguration config)
    {
        ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
        ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
        ServiceKey_Development_Package = config["DevAccount_FromPackage"];
        ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
    }

    public string ServiceKey_Development_Library { get; private set; }
    public string ServiceKey_Production_Library { get; private set; }
    public string ServiceKey_Development_Package { get; private set; }
    public string ServiceKey_Production_Package { get; private set; }

    public void OnGet()
    {
    }
}

Konzolalkalmazás belépési pont nélkül

Ez a megközelítés csak .NET-alkalmazásokhoz érhető el, a .NET-keretrendszerhez nem.

A dinamikus üzemeltetés indítási fejlesztése, amely nem igényel fordítási idő referenciát az aktiváláshoz, egy konzolalkalmazásban attribútumot HostingStartup tartalmazó belépési pont nélkül is megadható. A konzolalkalmazás közzététele egy tárhelyindító összetevőt hoz létre, amely felhasználható a futtatókörnyezeti áruházból.

Ebben a folyamatban egy belépési pont nélküli konzolalkalmazást használunk, mert:

  • A hostoló indítási környezetben való használathoz szükséges egy függőségi fájl. A függőségi fájl egy olyan futtatható alkalmazási eszköz, amelyet egy alkalmazás közzétételével állítanak elő, nem pedig könyvtárból.
  • A tárak nem vehetők fel közvetlenül a futtatókörnyezeti csomagtárolóba, amelyhez egy futtatható projektre van szükség, amely a megosztott futtatókörnyezetet célozza.

Új dinamikus hoszting vállalkozás létrehozásakor:

  • A rendszer egy üzemeltetési indítási szerelvényt hoz létre a konzolalkalmazásból a következő belépési pont nélkül:
    • Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást IHostingStartup .
    • Tartalmaz egy HostingStartup attribútumot a megvalósítási IHostingStartup osztály azonosításához.
  • A konzolalkalmazás közzététele a hosting startup függőségeinek lekérésére szolgál. A konzolalkalmazás közzétételének egyik következménye, hogy a nem használt függőségek ki vannak vágva a függőségek fájlból.
  • A függőségi fájlt módosítják az üzemeltetési indítási szerelvény futtatókörnyezeti helyének beállításához.
  • Az üzemeltetési indítási szerelvény és annak függőségi fájlja a futtatókörnyezeti csomagtárolóba kerül. A hosztolási startup assembly és annak függőségei fájljának felderítéséhez páros környezeti változókban vannak megtalálhatóak.

A konzolalkalmazás a Microsoft.AspNetCore.Hosting.Abstractions csomagra hivatkozik :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" 
                      Version="3.0.0" />
  </ItemGroup>

</Project>

A HostingStartup attribútum azonosítja az osztályt mint a betöltés és a végrehajtás implementációját, amikor a IHostingStartup létrejön. Az alábbi példában a névtér a következő StartupEnhancement, az osztály pedig a következő StartupEnhancementHostingStartup:

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

Egy osztály implementálja .IHostingStartup Az osztály Configure módszert használ IWebHostBuilder, hogy fejlesztéseket adjon egy alkalmazáshoz. IHostingStartup.Configure a tárhely induló összeállítást a futtatókörnyezet meghívja a felhasználói kód előtt Startup.Configure , amely lehetővé teszi a felhasználói kód számára, hogy felülírja a tárhely induló összeállítás által biztosított konfigurációt.

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

Projekt létrehozásakor IHostingStartup a függőségi fájl (.deps.json) a runtime szerelvény helyét a bin mappára állítja:

"targets": {
  ".NETCoreApp,Version=v3.0": {
    "StartupEnhancement/1.0.0": {
      "dependencies": {
        "Microsoft.AspNetCore.Hosting.Abstractions": "3.0.0"
      },
      "runtime": {
        "StartupEnhancement.dll": {}
      }
    }
  }
}

A fájlnak csak egy része jelenik meg. A példában a szerelvény neve a következő StartupEnhancement: .

Az üzemeltetési indítás által biztosított konfiguráció

A konfiguráció kezelésének két megközelítése van attól függően, hogy az üzemeltetési indítás konfigurációja elsőbbséget élvez-e, vagy az alkalmazás konfigurációja elsőbbséget élvez:

  1. Adjon konfigurációt az alkalmazásnak ConfigureAppConfiguration, hogy a konfiguráció betöltődjön az alkalmazás ConfigureAppConfiguration delegáltjainak végrehajtása után. Az indítási konfiguráció üzemeltetése ezzel a módszerrel elsőbbséget élvez az alkalmazás konfigurációjával szemben.
  2. Adjon meg konfigurációt az alkalmazásnak UseConfiguration, amely betölti a konfigurációt, mielőtt az alkalmazás delegáltjai ConfigureAppConfiguration végrehajtanák. Az alkalmazás konfigurációs értékei elsőbbséget élveznek az üzemeltetési indítás által biztosított értékekkel szemben ezzel a módszerrel.
public class ConfigurationInjection : IHostingStartup
{
    public void Configure(IWebHostBuilder builder)
    {
        Dictionary<string, string> dict;

        builder.ConfigureAppConfiguration(config =>
        {
            dict = new Dictionary<string, string>
            {
                {"ConfigurationKey1", 
                    "From IHostingStartup: Higher priority " +
                    "than the app's configuration."},
            };

            config.AddInMemoryCollection(dict);
        });

        dict = new Dictionary<string, string>
        {
            {"ConfigurationKey2", 
                "From IHostingStartup: Lower priority " +
                "than the app's configuration."},
        };

        var builtConfig = new ConfigurationBuilder()
            .AddInMemoryCollection(dict)
            .Build();

        builder.UseConfiguration(builtConfig);
    }
}

Az üzemeltetés indítási szerelvényének megadása

Osztálykönyvtár vagy konzolos alkalmazás által biztosított üzemeltetési indítás esetén adja meg az üzemeltetési indítás assembly nevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóban. A környezeti változó a szerelvények pontosvesszővel tagolt listája.

Csak az indítási szerelvények vannak szkennelve a HostingStartup attribútum tekintetében. A HostingStartupApp mintaalkalmazás esetében a korábban ismertetett üzemeltetési startupok felderítéséhez a környezeti változó a következő értékre van állítva:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Az üzemeltetési indítási szerelvény a Hosting Startup Assemblies állomáskonfigurációs beállításával is beállítható:

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

A {ASSEMBLY1;ASSEMBLY2; ...} helyettesítő a szerelvények pontosvesszővel tagolt listáját jelöli.

Ha több tárhely indítási modul van jelen, a Configure metódusok végrehajtása a felsorolt sorrendben történik.

Activation

Az indítási aktiválás üzemeltetésének lehetőségei a következők:

  • Futtatókörnyezeti tároló: Az aktiváláshoz nem szükséges fordítási idejű referencia. A mintaalkalmazás egy deployment mappába helyezi a hosztindító összeállítást és a függőségi fájlokat, hogy megkönnyítse a hosztindító üzembe helyezését többgépes környezetben. Az üzembehelyezési mappa tartalmaz egy PowerShell-szkriptet is, amely környezeti változókat hoz létre vagy módosít az üzembe helyezési rendszeren az üzemeltetési indítás engedélyezéséhez.
  • Az aktiváláshoz szükséges fordítási idejű hivatkozás

Futtatókörnyezeti tároló

A hosting startup implementáció a runtime store-ban található. A továbbfejlesztett alkalmazás nem igényel fordítási időben történő hivatkozást az assemblyre.

A tárhelyindítás létrehozása után a rendszer létrehoz egy runtime tárat a manifeszt projektfájl és a dotnet store parancs használatával.

dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization

A mintaalkalmazásban (RuntimeStore projekt) a következő parancsot használja:

dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization

Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezeti tárolót, a rendszer hozzáadja a futtatókörnyezeti tároló helyét a DOTNET_SHARED_STORE környezeti változóhoz.

A tárhely indítás függőségi fájljának módosítása és elhelyezése

Ha a fejlesztést csomaghivatkozás nélkül szeretné aktiválni, adjon meg további függőségeket a futtatókörnyezethez a következővel additionalDeps: . additionalDeps lehetővé teszi, hogy:

  • Bővítse ki az alkalmazás kódtár-gráfját úgy, hogy további .deps.json fájlokat biztosít az alkalmazás saját .deps.json fájljával való egyesítéshez indításkor.
  • A hosztolási indítási összetevő felderíthetővé és betölthetővé tétele.

A további függőségi fájlok létrehozásának ajánlott módszere a következő:

  1. Hajtsa végre dotnet publish az előző szakaszban említett futtatási környezet tárolójának manifesztfájlján.
  2. Távolítsa el a manifeszt hivatkozást a kódtárakból és az így kapott runtime fájl .deps.json szakaszából.

A példaprojektben a store.manifest/1.0.0 tulajdonság el van távolítva a targets és libraries szakaszból.

{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v3.0",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v3.0": {
      "store.manifest/1.0.0": {
        "dependencies": {
          "StartupDiagnostics": "1.0.0"
        },
        "runtime": {
          "store.manifest.dll": {}
        }
      },
      "StartupDiagnostics/1.0.0": {
        "runtime": {
          "lib/netcoreapp3.0/StartupDiagnostics.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
  },
  "libraries": {
    "store.manifest/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    },
    "StartupDiagnostics/1.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-xrhzuNSyM5/f4ZswhooJ9dmIYLP64wMnqUJSyTKVDKDVj5T+qtzypl8JmM/aFJLLpYrf0FYpVWvGujd7/FfMEw==",
      "path": "startupdiagnostics/1.0.0",
      "hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
    }
  }
}

Helyezze a .deps.json fájlt a következő helyre:

{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
  • {ADDITIONAL DEPENDENCIES PATH}: A környezeti változóhoz DOTNET_ADDITIONAL_DEPS hozzáadott hely.
  • {SHARED FRAMEWORK NAME}: Ehhez a további függőségi fájlhoz közös keretrendszer szükséges.
  • {SHARED FRAMEWORK VERSION}: A megosztott keretrendszer minimális verziója.
  • {ENHANCEMENT ASSEMBLY NAME}: A fejlesztés összeállításának neve.

A mintaalkalmazásban (RuntimeStore-projekt ) a további függőségi fájl a következő helyre kerül:

deployment/additionalDeps/shared/Microsoft.AspNetCore.App/3.0.0/StartupDiagnostics.deps.json

Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezet tárolójának helyét, a rendszer hozzáadja a további függőségek fájlhelyét a DOTNET_ADDITIONAL_DEPS környezeti változóhoz.

Note

A DOTNET_ADDITIONAL_DEPS környezeti változó csak keretrendszerfüggő alkalmazásokkal működik. Ezt a környezeti változót a rendszer figyelmen kívül hagyja az önálló alkalmazások esetében.

A mintaalkalmazásban (RuntimeStore-projekt ) a futtatókörnyezeti tároló létrehozása és a további függőségek fájljának létrehozása PowerShell-szkripttel történik.

A különböző operációs rendszerek környezeti változóinak beállítására vonatkozó példákért lásd: Több környezet használata.

Deployment

A többtényezős környezetben futó üzemeltetési indítás üzembe helyezésének megkönnyítése érdekében a mintaalkalmazás létrehoz egy üzembehelyezési mappát a közzétett kimenetben, amely a következőket tartalmazza:

  • Az üzemeltetési futtatókörnyezet tárolója.
  • Az hosztolási indítási függőségek fájlja.
  • Egy PowerShell-szkript, amely létrehozza vagy módosítja a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES, DOTNET_SHARED_STORE, és DOTNET_ADDITIONAL_DEPS annak érdekében, hogy támogassa az üzemeltetési indítás aktiválását. Futtassa a szkriptet egy rendszergazdai PowerShell-parancssorból az üzembe helyezési rendszeren.

NuGet-csomag

Egy üzemeltetési indítási fejlesztés nuGet-csomagban is elérhető. A csomagnak van egy HostingStartup attribútuma. A csomag által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:

  • A továbbfejlesztett alkalmazás projektfájlja csomaghivatkozást készít az alkalmazás projektfájljában található üzemeltetési indításhoz (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (.deps.json). Ez a megközelítés a nuget.org számára közzétett üzemeltetési indítási szerelvénycsomagra vonatkozik.
  • A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).

A NuGet-csomagokról és a futtatókörnyezet tárolójáról az alábbi témakörökben talál további információt:

Projekttároló mappa

A hoszting startup fejlesztését a továbbfejlesztett alkalmazásban egy bin-telepített gyűjtemény biztosíthatja. A szerelvény által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:

  • A továbbfejlesztett alkalmazás projektfájlja összeállítási hivatkozást készít az üzemeltetési indítási folyamatra (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (.deps.json). Ez a megközelítés akkor alkalmazható, ha az üzembe helyezési forgatókönyv fordításidejű hivatkozást kér az üzemeltetési indítási összeállítására (.dll fájlra), és az összeállítást vagy az alábbi helyek egyikére helyezi át:
    • A fogyasztó projekt.
    • A felhasználói projekt által elérhető helyszín.
  • A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
  • A .NET-keretrendszer megcélzásakor a szerelvény az alapértelmezett terhelési környezetben tölthető be, ami a .NET-keretrendszeren azt jelenti, hogy a szerelvény az alábbi helyek valamelyikén található:
    • Alkalmazás alap elérési útja: Az a bin mappa, amelyben az alkalmazás végrehajtható (.exe) található.
    • Globális Assembly Gyorsítótár (GAC): A GAC olyan assemblyket tárol, amelyeket több .NET-keretrendszer alkalmazás is használ. További információért lásd Hogyan: Szerelvény telepítése a globális szerelvény-gyorsítótárba a .NET-keretrendszer dokumentációjában.

példakód

A mintakód (letöltés) bemutatja az indítási megvalósítási forgatókönyvek üzemeltetését:

  • Két üzemeltetési indítási szerelvény (osztálykódtár) állít be egy-egy memóriabeli konfigurációs kulcs-érték párot:
    • NuGet-csomag (HostingStartupPackage)
    • Osztálykönyvtár (HostingStartupLibrary)
  • Egy hosztolási indulás egy tárhely-raktárba telepített szerelvényből (StartupDiagnostics) aktiválódik. A szerelvény két köztes szoftvert ad hozzá az alkalmazáshoz indításkor, amelyek diagnosztikai információkat nyújtanak a következőkkel kapcsolatban:
    • Regisztrált szolgáltatások
    • Cím (séma, gazdagép, útvonal alapja, elérési út, lekérdezési string)
    • Kapcsolat (távoli IP-cím, távoli port, helyi IP-cím, helyi port, ügyféltanúsítvány)
    • HTTP-kérés fejlécek
    • Környezeti változók

A minta futtatásához:

Aktiválás NuGet-csomagból

  1. Állítsa össze a HostingStartupPackage csomagot a dotnet pack paranccsal.

  2. Adja hozzá a csomag HostingStartupPackage szerelvénynevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.

  3. Állítsa össze és futtassa az alkalmazást. A bővített alkalmazásban egy csomag referenciája van jelen (fordítási idő hivatkozás). Az <PropertyGroup> alkalmazás projektfájljában a csomagprojekt kimenetét (../HostingStartupPackage/bin/Debug) csomagforrásként adja meg. Ez lehetővé teszi, hogy az alkalmazás anélkül használja a csomagot, hogy feltöltené a csomagot a nuget.org. További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.

    <PropertyGroup>
      <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources>
    </PropertyGroup>
    
  4. Figyelje meg, hogy az Index lap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek a csomag metódusa ServiceKeyInjection.Configure által beállított értékekkel.

Ha módosítja a HostingStartupPackage projektet, és újrafordít, törölje a helyi NuGet-csomag gyorsítótárait, hogy a HostingStartupApp megkapja a frissített csomagot, és ne a helyi gyorsítótárból származó elavult csomagot. A helyi NuGet-gyorsítótárak törléséhez hajtsa végre a következő dotnet nuget locals parancsot:

dotnet nuget locals all --clear

Aktiválás osztálytárból

  1. Állítsa össze a HostingStartupLibrary osztálytárat a dotnet build parancsával.

  2. Adja hozzá az osztálytár HostingStartupLibrary szerelvénynevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.

  3. helyezze üzembe az osztálytár szerelvényét az alkalmazásban az osztálytár lefordított kimenetéből a HostingStartupLibrary.dll fájl másolásával az alkalmazás bin/Debug mappájába.

  4. Állítsa össze és futtassa az alkalmazást. Az <ItemGroup> alkalmazás projektfájljában az osztálykönyvtár szerelvényét (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) hivatkozza meg (fordítási idejű hivatkozásként). További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.

    <ItemGroup>
      <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll">
        <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath>
        <SpecificVersion>False</SpecificVersion> 
      </Reference>
    </ItemGroup>
    
  5. Figyelje meg, hogy az Indexlap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek az osztálytár metódusa ServiceKeyInjection.Configure által beállított értékekkel.

Aktiválás futtatókörnyezetben üzembe helyezett szerelvényből

  1. A StartupDiagnostics projekt a PowerShell használatával módosítja a fájlját StartupDiagnostics.deps.json . A PowerShell alapértelmezés szerint a Windows 7 SP1-től és a Windows Server 2008 R2 SP1-től kezdve telepítve van. Ha más platformokon szeretné beszerezni a PowerShellt, olvassa el a PowerShell különböző verzióinak telepítését.
  2. Hajtsa végre a build.ps1 szkriptet a RuntimeStore mappában. A szkript:
    • Létrehozza a StartupDiagnostics csomagot az obj\packages mappában.
    • Létrehozza a futtatókörnyezeti tárolót StartupDiagnostics az áruház mappájában. A dotnet store szkript parancsa a win7-x64futtatókörnyezet azonosítóját (RID) használja a Windowsra telepített hosztelési indításhoz. Amikor másik futtatókörnyezethez adja meg a üzemeltetési indítást, cserélje le a megfelelő RID-et a szkript 37. sorában. A StartupDiagnostics futtatási tárolót később áthelyezik a felhasználó vagy a rendszer futtatási tárolójába azon a gépen, amelyen a szerelvényt használni fogják. A StartupDiagnostics szerelvény felhasználói futtatókörnyezeti tárolójának telepítési helye a .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll.
    • Létrehozza a additionalDeps a StartupDiagnostics számára az additionalDeps mappában. A további függőségek később átkerülnek a felhasználó vagy a rendszer további függőségeibe. A felhasználó StartupDiagnostics további függőségeinek telepítési helye a .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json.
    • A deploy.ps1 fájlt a központi telepítési mappába helyezi.
  3. Futtassa a deploy.ps1 szkriptet az üzembe helyezési mappában. A szkript hozzáfűzi a következőt:
    • StartupDiagnostics a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.
    • Az indítási függőségek útvonalát (a RuntimeStore projekt üzembehelyezési mappájában) a DOTNET_ADDITIONAL_DEPS környezeti változóhoz kell megadni.
    • A futtatókörnyezet-tároló elérési útja (a RuntimeStore projekt üzembehelyezési mappájában) a DOTNET_SHARED_STORE környezeti változóhoz.
  4. Futtassa a mintaalkalmazást.
  5. Kérje meg a /services végpontot az alkalmazás regisztrált szolgáltatásainak megtekintéséhez. Kérje meg a /diag végpontot a diagnosztikai információk megtekintéséhez.

Egy IHostingStartup (hosting indítási környezet) implementáció fejlesztéseket ad hozzá egy alkalmazáshoz indításkor egy külső könyvtárból. Egy külső könyvtár például is képes tárhelyindítási implementáció segítségével további konfigurációs szolgáltatókat és szolgáltatásokat biztosítani egy alkalmazásnak.

Mintakód megtekintése vagy letöltése (hogyan töltsd le)

HostingStartup attribútum

A HostingStartup attribútum egy üzemeltetési indítási szerelvény jelenlétét jelzi, amely futásidőben aktiválódik.

A rendszer automatikusan ellenőrzi az Startup attribútumra nézve a HostingStartup osztályt tartalmazó belépési szerelvényt vagy szerelvényt. Az attribútumok kereséséhez HostingStartup szükséges szerelvények listája futásidőben töltődik be a WebHostDefaults.HostingStartupAssembliesKey konfigurációjából. A felderítésből kizárandó szerelvények listája a WebHostDefaults.HostingStartupExcludeAssembliesKey fájlból töltődik be. További információkért lásd: Webgazda: Indítási szerelvények üzemeltetése és Webgazda: Indítási szerelvények kizárása üzemeltetéskor.

A következő példában az üzemeltető indító assembly névtere: StartupEnhancement. Az üzemeltetési indítási kódot tartalmazó osztály a következő StartupEnhancementHostingStartup:

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

Az HostingStartup attribútum általában a hosztoló indítószerelvény implementációs osztályfájljában található IHostingStartup.

A betöltött hoszting indítások összeállításainak felfedezése

A betöltött hosting indítási összeállítások felderítéséhez engedélyezze a naplózást, és ellenőrizze az alkalmazás naplóit. A rendszer a szerelvények betöltésekor előforduló hibákat naplózza. A betöltött indulási összetevők a Debug szinten vannak naplózva, és minden hibát naplóznak.

Hosztoló indítási összetevők automatikus betöltésének letiltása

Az indítási összetevők automatikus betöltésének letiltásához használja az alábbi módszerek egyikét:

  • Annak érdekében, hogy megakadályozza az összes hoszting indítási összetevő betöltését, állítsa egyik alábbi beállítást a következő értékek egyikére: true vagy 1.
  • Ha meg szeretné akadályozni, hogy bizonyos indítási szerelvények betöltődjenek, állítsa az alábbiak egyikét egy pontosvesszővel elválasztott, indításkor kizárandó szerelvények listájára:

Ha a gazdagép konfigurációs beállítása és a környezeti változó is be van állítva, a gazdabeállítás szabályozza a viselkedést.

Ha letiltja az indítási szerelvények üzemeltetését a gazdagépbeállítás vagy a környezeti változó használatával, az globálisan letiltja a szerelvényt, és az alkalmazás több jellemzőjét is letilthatja.

Project

Hozzon létre egy üzemeltetési indítást az alábbi projekttípusok valamelyikével:

Osztálytár

Egy hosting szolgáltatás fejlesztése egy osztálykönyvtárban is elérhető. A kódtár tartalmaz egy HostingStartup attribútumot.

A mintakód tartalmaz egy Pages-alkalmazást, a RazorHostingStartupAppot és egy osztálytárat, a HostingStartupLibraryt. Az osztálykódtár:

  • Egy hostindító osztályt tartalmaz, ServiceKeyInjection, amely implementálja az IHostingStartup-t. ServiceKeyInjection Egy pár szolgáltatáskódot ad hozzá az alkalmazás konfigurációjához a memóriában tárolt konfigurációs szolgáltató (AddInMemoryCollection) használatával.
  • Tartalmaz egy HostingStartup attribútumot, amely azonosítja az üzemeltető startup névterét és osztályát.

Az ServiceKeyInjection osztály Configure metódusa IWebHostBuilder továbbfejlesztéseket ad egy alkalmazáshoz.

HostingStartupLibrary/ServiceKeyInjection.cs:

[assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]

namespace HostingStartupLibrary
{
    public class ServiceKeyInjection : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureAppConfiguration(config =>
            {
                var dict = new Dictionary<string, string>
                {
                    {"DevAccount_FromLibrary", "DEV_1111111-1111"},
                    {"ProdAccount_FromLibrary", "PROD_2222222-2222"}
                };

                config.AddInMemoryCollection(dict);
            });
        }
    }
}

Az alkalmazás indexoldala beolvassa és megjeleníti az osztálytár indítási szerelvénye által beállított két kulcs konfigurációs értékeit:

HostingStartupApp/Pages/Index.cshtml.cs:

public class IndexModel : PageModel
{
    public IndexModel(IConfiguration config)
    {
        ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
        ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
        ServiceKey_Development_Package = config["DevAccount_FromPackage"];
        ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
    }

    public string ServiceKey_Development_Library { get; private set; }
    public string ServiceKey_Production_Library { get; private set; }
    public string ServiceKey_Development_Package { get; private set; }
    public string ServiceKey_Production_Package { get; private set; }

    public void OnGet()
    {
    }
}

A mintakód tartalmaz egy NuGet-csomagprojektet is, amely egy különálló üzemeltetési indítást, a HostingStartupPackage-t biztosít. A csomag jellemzői megegyeznek a korábban ismertetett osztálykódtár jellemzőivel. A csomag:

  • Egy hostindító osztályt tartalmaz, ServiceKeyInjection, amely implementálja az IHostingStartup-t. ServiceKeyInjection hozzáad egy pár szolgáltatási sztringet az alkalmazás konfigurációjához.
  • Tartalmaz egy HostingStartup attribútumot.

HostingStartupPackage/ServiceKeyInjection.cs:

[assembly: HostingStartup(typeof(HostingStartupPackage.ServiceKeyInjection))]

namespace HostingStartupPackage
{
    public class ServiceKeyInjection : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            builder.ConfigureAppConfiguration(config =>
            {
                var dict = new Dictionary<string, string>
                {
                    {"DevAccount_FromPackage", "DEV_3333333-3333"},
                    {"ProdAccount_FromPackage", "PROD_4444444-4444"}
                };

                config.AddInMemoryCollection(dict);
            });
        }
    }
}

Az alkalmazás indexoldala beolvassa és megjeleníti a csomag üzemeltetési indítási szerelvénye által beállított két kulcs konfigurációs értékeit:

HostingStartupApp/Pages/Index.cshtml.cs:

public class IndexModel : PageModel
{
    public IndexModel(IConfiguration config)
    {
        ServiceKey_Development_Library = config["DevAccount_FromLibrary"];
        ServiceKey_Production_Library = config["ProdAccount_FromLibrary"];
        ServiceKey_Development_Package = config["DevAccount_FromPackage"];
        ServiceKey_Production_Package = config["ProdAccount_FromPackage"];
    }

    public string ServiceKey_Development_Library { get; private set; }
    public string ServiceKey_Production_Library { get; private set; }
    public string ServiceKey_Development_Package { get; private set; }
    public string ServiceKey_Production_Package { get; private set; }

    public void OnGet()
    {
    }
}

Konzolalkalmazás belépési pont nélkül

Ez a megközelítés csak .NET-alkalmazásokhoz érhető el, a .NET-keretrendszerhez nem.

A dinamikus üzemeltetés indítási fejlesztése, amely nem igényel fordítási idő referenciát az aktiváláshoz, egy konzolalkalmazásban attribútumot HostingStartup tartalmazó belépési pont nélkül is megadható. A konzolalkalmazás közzététele egy tárhelyindító összetevőt hoz létre, amely felhasználható a futtatókörnyezeti áruházból.

Ebben a folyamatban egy belépési pont nélküli konzolalkalmazást használunk, mert:

  • A hostoló indítási környezetben való használathoz szükséges egy függőségi fájl. A függőségi fájl egy olyan futtatható alkalmazási eszköz, amelyet egy alkalmazás közzétételével állítanak elő, nem pedig könyvtárból.
  • A tárak nem vehetők fel közvetlenül a futtatókörnyezeti csomagtárolóba, amelyhez egy futtatható projektre van szükség, amely a megosztott futtatókörnyezetet célozza.

Új dinamikus hoszting vállalkozás létrehozásakor:

  • A rendszer egy üzemeltetési indítási szerelvényt hoz létre a konzolalkalmazásból a következő belépési pont nélkül:
    • Tartalmaz egy olyan osztályt, amely tartalmazza a megvalósítást IHostingStartup .
    • Tartalmaz egy HostingStartup attribútumot a megvalósítási IHostingStartup osztály azonosításához.
  • A konzolalkalmazás közzététele a hosting startup függőségeinek lekérésére szolgál. A konzolalkalmazás közzétételének egyik következménye, hogy a nem használt függőségek ki vannak vágva a függőségek fájlból.
  • A függőségi fájlt módosítják az üzemeltetési indítási szerelvény futtatókörnyezeti helyének beállításához.
  • Az üzemeltetési indítási szerelvény és annak függőségi fájlja a futtatókörnyezeti csomagtárolóba kerül. A hosztolási startup assembly és annak függőségei fájljának felderítéséhez páros környezeti változókban vannak megtalálhatóak.

A konzolalkalmazás a Microsoft.AspNetCore.Hosting.Abstractions csomagra hivatkozik :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" 
                      Version="2.1.1" />
  </ItemGroup>

</Project>

A HostingStartup attribútum azonosítja az osztályt mint a betöltés és a végrehajtás implementációját, amikor a IHostingStartup létrejön. Az alábbi példában a névtér a következő StartupEnhancement, az osztály pedig a következő StartupEnhancementHostingStartup:

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

Egy osztály implementálja .IHostingStartup Az osztály Configure módszert használ IWebHostBuilder, hogy fejlesztéseket adjon egy alkalmazáshoz. IHostingStartup.Configure a tárhely induló összeállítást a futtatókörnyezet meghívja a felhasználói kód előtt Startup.Configure , amely lehetővé teszi a felhasználói kód számára, hogy felülírja a tárhely induló összeállítás által biztosított konfigurációt.

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

Projekt létrehozásakor IHostingStartup a függőségi fájl (.deps.json) a runtime szerelvény helyét a bin mappára állítja:

"targets": {
  ".NETCoreApp,Version=v2.1": {
    "StartupEnhancement/1.0.0": {
      "dependencies": {
        "Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1"
      },
      "runtime": {
        "StartupEnhancement.dll": {}
      }
    }
  }
}

A fájlnak csak egy része jelenik meg. A példában a szerelvény neve a következő StartupEnhancement: .

Az üzemeltetési indítás által biztosított konfiguráció

A konfiguráció kezelésének két megközelítése van attól függően, hogy az üzemeltetési indítás konfigurációja elsőbbséget élvez-e, vagy az alkalmazás konfigurációja elsőbbséget élvez:

  1. Adjon konfigurációt az alkalmazásnak ConfigureAppConfiguration, hogy a konfiguráció betöltődjön az alkalmazás ConfigureAppConfiguration delegáltjainak végrehajtása után. Az indítási konfiguráció üzemeltetése ezzel a módszerrel elsőbbséget élvez az alkalmazás konfigurációjával szemben.
  2. Adjon meg konfigurációt az alkalmazásnak UseConfiguration, amely betölti a konfigurációt, mielőtt az alkalmazás delegáltjai ConfigureAppConfiguration végrehajtanák. Az alkalmazás konfigurációs értékei elsőbbséget élveznek az üzemeltetési indítás által biztosított értékekkel szemben ezzel a módszerrel.
public class ConfigurationInjection : IHostingStartup
{
    public void Configure(IWebHostBuilder builder)
    {
        Dictionary<string, string> dict;

        builder.ConfigureAppConfiguration(config =>
        {
            dict = new Dictionary<string, string>
            {
                {"ConfigurationKey1", 
                    "From IHostingStartup: Higher priority " +
                    "than the app's configuration."},
            };

            config.AddInMemoryCollection(dict);
        });

        dict = new Dictionary<string, string>
        {
            {"ConfigurationKey2", 
                "From IHostingStartup: Lower priority " +
                "than the app's configuration."},
        };

        var builtConfig = new ConfigurationBuilder()
            .AddInMemoryCollection(dict)
            .Build();

        builder.UseConfiguration(builtConfig);
    }
}

Az üzemeltetés indítási szerelvényének megadása

Osztálykönyvtár vagy konzolos alkalmazás által biztosított üzemeltetési indítás esetén adja meg az üzemeltetési indítás assembly nevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóban. A környezeti változó a szerelvények pontosvesszővel tagolt listája.

Csak az indítási szerelvények vannak szkennelve a HostingStartup attribútum tekintetében. A HostingStartupApp mintaalkalmazás esetében a korábban ismertetett üzemeltetési startupok felderítéséhez a környezeti változó a következő értékre van állítva:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

A hosting indítási összeállítás a Hosting Startup Assemblies host konfigurációs beállításával is beállítható.

Ha több tárhely indítási modul van jelen, a Configure metódusok végrehajtása a felsorolt sorrendben történik.

Activation

Az indítási aktiválás üzemeltetésének lehetőségei a következők:

  • Futtatókörnyezeti tároló: Az aktiváláshoz nem szükséges fordítási idejű referencia. A mintaalkalmazás egy deployment mappába helyezi a hosztindító összeállítást és a függőségi fájlokat, hogy megkönnyítse a hosztindító üzembe helyezését többgépes környezetben. Az üzembehelyezési mappa tartalmaz egy PowerShell-szkriptet is, amely környezeti változókat hoz létre vagy módosít az üzembe helyezési rendszeren az üzemeltetési indítás engedélyezéséhez.
  • Az aktiváláshoz szükséges fordítási idejű hivatkozás

Futtatókörnyezeti tároló

A hosting startup implementáció a runtime store-ban található. A továbbfejlesztett alkalmazás nem igényel fordítási időben történő hivatkozást az assemblyre.

A tárhelyindítás létrehozása után a rendszer létrehoz egy runtime tárat a manifeszt projektfájl és a dotnet store parancs használatával.

dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization

A mintaalkalmazásban (RuntimeStore projekt) a következő parancsot használja:

dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization

Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezeti tárolót, a rendszer hozzáadja a futtatókörnyezeti tároló helyét a DOTNET_SHARED_STORE környezeti változóhoz.

A tárhely indítás függőségi fájljának módosítása és elhelyezése

Ha a fejlesztést csomaghivatkozás nélkül szeretné aktiválni, adjon meg további függőségeket a futtatókörnyezethez a következővel additionalDeps: . additionalDeps lehetővé teszi, hogy:

  • Bővítse ki az alkalmazás kódtár-gráfját úgy, hogy további .deps.json fájlokat biztosít az alkalmazás saját .deps.json fájljával való egyesítéshez indításkor.
  • A hosztolási indítási összetevő felderíthetővé és betölthetővé tétele.

A további függőségi fájlok létrehozásának ajánlott módszere a következő:

  1. Hajtsa végre dotnet publish az előző szakaszban említett futtatási környezet tárolójának manifesztfájlján.
  2. Távolítsa el a manifeszt hivatkozást a kódtárakból és az így kapott runtime fájl .deps.json szakaszából.

A példaprojektben a store.manifest/1.0.0 tulajdonság el van távolítva a targets és libraries szakaszból.

{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v2.1",
    "signature": "4ea77c7b75ad1895ae1ea65e6ba2399010514f99"
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v2.1": {
      "store.manifest/1.0.0": {
        "dependencies": {
          "StartupDiagnostics": "1.0.0"
        },
        "runtime": {
          "store.manifest.dll": {}
        }
      },
      "StartupDiagnostics/1.0.0": {
        "runtime": {
          "lib/netcoreapp2.1/StartupDiagnostics.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
  },
  "libraries": {
    "store.manifest/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    },
    "StartupDiagnostics/1.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-oiQr60vBQW7+nBTmgKLSldj06WNLRTdhOZpAdEbCuapoZ+M2DJH2uQbRLvFT8EGAAv4TAKzNtcztpx5YOgBXQQ==",
      "path": "startupdiagnostics/1.0.0",
      "hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
    }
  }
}

Helyezze a .deps.json fájlt a következő helyre:

{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
  • {ADDITIONAL DEPENDENCIES PATH}: A környezeti változóhoz DOTNET_ADDITIONAL_DEPS hozzáadott hely.
  • {SHARED FRAMEWORK NAME}: Ehhez a további függőségi fájlhoz közös keretrendszer szükséges.
  • {SHARED FRAMEWORK VERSION}: A megosztott keretrendszer minimális verziója.
  • {ENHANCEMENT ASSEMBLY NAME}: A fejlesztés összeállításának neve.

A mintaalkalmazásban (RuntimeStore-projekt ) a további függőségi fájl a következő helyre kerül:

deployment/additionalDeps/shared/Microsoft.AspNetCore.App/2.1.0/StartupDiagnostics.deps.json

Ahhoz, hogy a futtatókörnyezet felderítse a futtatókörnyezet tárolójának helyét, a rendszer hozzáadja a további függőségek fájlhelyét a DOTNET_ADDITIONAL_DEPS környezeti változóhoz.

Note

A DOTNET_ADDITIONAL_DEPS környezeti változó csak keretrendszerfüggő alkalmazásokkal működik. Ezt a környezeti változót a rendszer figyelmen kívül hagyja az önálló alkalmazások esetében.

A mintaalkalmazásban (RuntimeStore-projekt ) a futtatókörnyezeti tároló létrehozása és a további függőségek fájljának létrehozása PowerShell-szkripttel történik.

A különböző operációs rendszerek környezeti változóinak beállítására vonatkozó példákért lásd: Több környezet használata.

Deployment

A többtényezős környezetben futó üzemeltetési indítás üzembe helyezésének megkönnyítése érdekében a mintaalkalmazás létrehoz egy üzembehelyezési mappát a közzétett kimenetben, amely a következőket tartalmazza:

  • Az üzemeltetési futtatókörnyezet tárolója.
  • Az hosztolási indítási függőségek fájlja.
  • Egy PowerShell-szkript, amely létrehozza vagy módosítja a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES, DOTNET_SHARED_STORE, és DOTNET_ADDITIONAL_DEPS annak érdekében, hogy támogassa az üzemeltetési indítás aktiválását. Futtassa a szkriptet egy rendszergazdai PowerShell-parancssorból az üzembe helyezési rendszeren.

NuGet-csomag

Egy üzemeltetési indítási fejlesztés nuGet-csomagban is elérhető. A csomagnak van egy HostingStartup attribútuma. A csomag által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:

  • A továbbfejlesztett alkalmazás projektfájlja csomaghivatkozást készít az alkalmazás projektfájljában található üzemeltetési indításhoz (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (.deps.json). Ez a megközelítés a nuget.org számára közzétett üzemeltetési indítási szerelvénycsomagra vonatkozik.
  • A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).

A NuGet-csomagokról és a futtatókörnyezet tárolójáról az alábbi témakörökben talál további információt:

Projekttároló mappa

A hoszting startup fejlesztését a továbbfejlesztett alkalmazásban egy bin-telepített gyűjtemény biztosíthatja. A szerelvény által biztosított üzemeltetési indítási típusok az alábbi módszerek egyikével érhetők el az alkalmazás számára:

  • A továbbfejlesztett alkalmazás projektfájlja összeállítási hivatkozást készít az üzemeltetési indítási folyamatra (fordítási idő referenciája). A fordítási idő referenciájával a rendszer az üzemeltetési indítási szerelvényt és annak összes függőségét beépíti az alkalmazás függőségi fájljába (.deps.json). Ez a megközelítés akkor alkalmazható, ha az üzembe helyezési forgatókönyv fordításidejű hivatkozást kér az üzemeltetési indítási összeállítására (.dll fájlra), és az összeállítást vagy az alábbi helyek egyikére helyezi át:
    • A fogyasztó projekt.
    • A felhasználói projekt által elérhető helyszín.
  • A hosting startup függőségeinek fájlja elérhetővé válik a bővített alkalmazás számára a Runtime Store szakaszban leírtak szerint (fordítási időbeni referencia nélkül).
  • A .NET-keretrendszer megcélzásakor a szerelvény az alapértelmezett terhelési környezetben tölthető be, ami a .NET-keretrendszeren azt jelenti, hogy a szerelvény az alábbi helyek valamelyikén található:
    • Alkalmazás alap elérési útja: Az a bin mappa, amelyben az alkalmazás végrehajtható (.exe) található.
    • Globális Assembly Gyorsítótár (GAC): A GAC olyan assemblyket tárol, amelyeket több .NET-keretrendszer alkalmazás is használ. További információért lásd Hogyan: Szerelvény telepítése a globális szerelvény-gyorsítótárba a .NET-keretrendszer dokumentációjában.

példakód

A mintakód (letöltés) bemutatja az indítási megvalósítási forgatókönyvek üzemeltetését:

  • Két üzemeltetési indítási szerelvény (osztálykódtár) állít be egy-egy memóriabeli konfigurációs kulcs-érték párot:
    • NuGet-csomag (HostingStartupPackage)
    • Osztálykönyvtár (HostingStartupLibrary)
  • Egy hosztolási indulás egy tárhely-raktárba telepített szerelvényből (StartupDiagnostics) aktiválódik. A szerelvény két köztes szoftvert ad hozzá az alkalmazáshoz indításkor, amelyek diagnosztikai információkat nyújtanak a következőkkel kapcsolatban:
    • Regisztrált szolgáltatások
    • Cím (séma, gazdagép, útvonal alapja, elérési út, lekérdezési string)
    • Kapcsolat (távoli IP-cím, távoli port, helyi IP-cím, helyi port, ügyféltanúsítvány)
    • HTTP-kérés fejlécek
    • Környezeti változók

A minta futtatásához:

Aktiválás NuGet-csomagból

  1. Állítsa össze a HostingStartupPackage csomagot a dotnet pack paranccsal.

  2. Adja hozzá a csomag HostingStartupPackage szerelvénynevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.

  3. Állítsa össze és futtassa az alkalmazást. A bővített alkalmazásban egy csomag referenciája van jelen (fordítási idő hivatkozás). Az <PropertyGroup> alkalmazás projektfájljában a csomagprojekt kimenetét (../HostingStartupPackage/bin/Debug) csomagforrásként adja meg. Ez lehetővé teszi, hogy az alkalmazás anélkül használja a csomagot, hogy feltöltené a csomagot a nuget.org. További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.

    <PropertyGroup>
      <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources>
    </PropertyGroup>
    
  4. Figyelje meg, hogy az Index lap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek a csomag metódusa ServiceKeyInjection.Configure által beállított értékekkel.

Ha módosítja a HostingStartupPackage projektet, és újrafordít, törölje a helyi NuGet-csomag gyorsítótárait, hogy a HostingStartupApp megkapja a frissített csomagot, és ne a helyi gyorsítótárból származó elavult csomagot. A helyi NuGet-gyorsítótárak törléséhez hajtsa végre a következő dotnet nuget locals parancsot:

dotnet nuget locals all --clear

Aktiválás osztálytárból

  1. Állítsa össze a HostingStartupLibrary osztálytárat a dotnet build parancsával.

  2. Adja hozzá az osztálytár HostingStartupLibrary szerelvénynevét a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.

  3. helyezze üzembe az osztálytár szerelvényét az alkalmazásban az osztálytár lefordított kimenetéből a HostingStartupLibrary.dll fájl másolásával az alkalmazás bin/Debug mappájába.

  4. Állítsa össze és futtassa az alkalmazást. Az <ItemGroup> alkalmazás projektfájljában az osztálytár szerelvényére (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) hivatkozik (fordítási idő referenciája). További információkért tekintse meg a HostingStartupApp projektfájljának megjegyzéseit.

    <ItemGroup>
      <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll">
        <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath>
        <SpecificVersion>False</SpecificVersion>
      </Reference>
    </ItemGroup>
    
  5. Figyelje meg, hogy az Indexlap által megjelenített szolgáltatáskonfigurációs kulcsértékek megegyeznek az osztálytár metódusa ServiceKeyInjection.Configure által beállított értékekkel.

Aktiválás futtatókörnyezetben üzembe helyezett szerelvényből

  1. A StartupDiagnostics projekt a PowerShell használatával módosítja a fájlját StartupDiagnostics.deps.json . A PowerShell alapértelmezés szerint a Windows 7 SP1-től és a Windows Server 2008 R2 SP1-től kezdve telepítve van. Ha más platformokon szeretné beszerezni a PowerShellt, olvassa el a PowerShell különböző verzióinak telepítését.
  2. Hajtsa végre a build.ps1 szkriptet a RuntimeStore mappában. A szkript:
    • Létrehozza a StartupDiagnostics csomagot az obj\packages mappában.
    • Létrehozza a futtatókörnyezeti tárolót StartupDiagnostics az áruház mappájában. A dotnet store szkript parancsa a win7-x64futtatókörnyezet azonosítóját (RID) használja a Windowsra telepített hosztelési indításhoz. Amikor másik futtatókörnyezethez adja meg a üzemeltetési indítást, cserélje le a megfelelő RID-et a szkript 37. sorában. A StartupDiagnostics futtatási tárolót később áthelyezik a felhasználó vagy a rendszer futtatási tárolójába azon a gépen, amelyen a szerelvényt használni fogják. A StartupDiagnostics szerelvény felhasználói futtatókörnyezeti tárolójának telepítési helye a .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll.
    • Létrehozza a additionalDeps a StartupDiagnostics számára az additionalDeps mappában. A további függőségek később átkerülnek a felhasználó vagy a rendszer további függőségeibe. A felhasználó StartupDiagnostics további függőségeinek telepítési helye a .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json.
    • A deploy.ps1 fájlt a központi telepítési mappába helyezi.
  3. Futtassa a deploy.ps1 szkriptet az üzembe helyezési mappában. A szkript hozzáfűzi a következőt:
    • StartupDiagnostics a ASPNETCORE_HOSTINGSTARTUPASSEMBLIES környezeti változóhoz.
    • Az indítási függőségek útvonalát (a RuntimeStore projekt üzembehelyezési mappájában) a DOTNET_ADDITIONAL_DEPS környezeti változóhoz kell megadni.
    • A futtatókörnyezet-tároló elérési útja (a RuntimeStore projekt üzembehelyezési mappájában) a DOTNET_SHARED_STORE környezeti változóhoz.
  4. Futtassa a mintaalkalmazást.
  5. Kérje meg a /services végpontot az alkalmazás regisztrált szolgáltatásainak megtekintéséhez. Kérje meg a /diag végpontot a diagnosztikai információk megtekintéséhez.