ASP.NET Core'da barındırma başlangıç derlemelerini kullanma

Tarafından Pavel Krymets

Bir IHostingStartup (barındırma başlatması) uygulaması, bir dış derlemeden başlatma sırasında uygulamaya iyileştirmeler ekler. Örneğin, bir dış kitaplık, bir uygulamaya ek yapılandırma sağlayıcıları veya hizmetler sağlamak için barındırma başlangıç uygulamasını kullanabilir.

Örnek kodu görüntüleme veya indirme (indirme)

HostingStartup özniteliği

HostingStartup özniteliği, çalışma zamanında etkinleştirilen bir barındırma başlatma derlemesinin varlığını gösterir.

Giriş derlemesi veya sınıfını Startup içeren derleme özniteliği için HostingStartup otomatik olarak taranır. Öznitelikleri aramak için HostingStartup derlemelerin listesi, WebHostDefaults.HostingStartupAssembliesKey'deki yapılandırmadan çalışma zamanında yüklenir. Bulmanın dışında tutulacak derlemelerin listesi WebHostDefaults.HostingStartupExcludeAssembliesKey dosyasından yüklenir.

Aşağıdaki örnekte, barındırma başlangıç derlemesinin ad alanı şeklindedir StartupEnhancement. Barındırma başlangıç kodunu içeren sınıf:StartupEnhancementHostingStartup

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

HostingStartup özniteliği genellikle barındırma başlangıç derlemesinin IHostingStartup uygulama sınıfı dosyasında bulunur.

Yüklü barındırma başlangıç derlemelerini bulma

Yüklü barındırma başlangıç derlemelerini bulmak için günlüğe kaydetmeyi etkinleştirin ve uygulamanın günlüklerini denetleyin. Derlemeler yüklenirken oluşan hatalar günlüğe kaydedilir. Yüklenen barındırma başlangıç derlemeleri Hata ayıklama düzeyinde günlüğe kaydedilir ve tüm hatalar günlüğe kaydedilir.

Barındırma başlangıç derlemelerinin otomatik yüklenmesini devre dışı bırakma

Barındırma başlangıç derlemelerinin otomatik yüklenmesini devre dışı bırakmak için aşağıdaki yaklaşımlardan birini kullanın:

  • Tüm barındırma başlangıç derlemelerinin yüklenmesini önlemek için, aşağıdakilerden birini veya 1olarak true ayarlayın:

    • Barındırma Başlangıç ana bilgisayar yapılandırma ayarını engelle:

      public static IHostBuilder CreateHostBuilder(string[] args) =>
          Host.CreateDefaultBuilder(args)
              .ConfigureWebHostDefaults(webBuilder =>
              {
                  webBuilder.UseSetting(
                          WebHostDefaults.PreventHostingStartupKey, "true")
                      .UseStartup<Startup>();
              });
      
    • ASPNETCORE_PREVENTHOSTINGSTARTUP ortam değişkeni.

  • Belirli barındırma başlatma derlemelerinin yüklenmesini önlemek için, aşağıdakilerden birini başlangıçta hariç tutulacak şekilde noktalı virgülle ayrılmış bir barındırma başlangıç derlemesi dizesine ayarlayın:

    • Barındırma Başlangıç Dışlama Derlemeleri ana bilgisayar yapılandırma ayarı:

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

      Yer {ASSEMBLY1;ASSEMBLY2; ...} tutucu, derlemelerin noktalı virgülle ayrılmış listesini temsil eder.

    • ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES ortam değişkeni.

Hem konak yapılandırma ayarı hem de ortam değişkeni ayarlanırsa, konak ayarı davranışı denetler.

Konak ayarını veya ortam değişkenini kullanarak barındırma başlangıç derlemelerini devre dışı bırakmak derlemeyi genel olarak devre dışı bırakır ve bir uygulamanın çeşitli özelliklerini devre dışı bırakabilir.

Project

Aşağıdaki proje türlerinden biriyle barındırma başlatması oluşturun:

Sınıf kitaplığı

Bir sınıf kitaplığında barındırma başlatma geliştirmesi sağlanabilir. Kitaplık bir HostingStartup öznitelik içerir.

Örnek kod bir Razor Pages uygulaması, HostingStartupApp ve HostingStartupLibrary sınıf kitaplığı içerir. Sınıf kitaplığı:

  • uygulayan IHostingStartupbir barındırma başlangıç sınıfı ServiceKeyInjectioniçerir. ServiceKeyInjection , bellek içi yapılandırma sağlayıcısını (AddInMemoryCollection) kullanarak uygulamanın yapılandırmasına bir çift hizmet dizesi ekler.
  • Barındırma başlangıcının ad alanını ve sınıfını tanımlayan bir HostingStartup öznitelik içerir.

Sınıfın ServiceKeyInjectionConfigure yöntemi, bir IWebHostBuilder uygulamaya iyileştirmeler eklemek için kullanır.

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);
            });
        }
    }
}

Uygulamanın Dizin sayfası, sınıf kitaplığının barındırma başlangıç derlemesi tarafından ayarlanan iki anahtar için yapılandırma değerlerini okur ve işler:

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()
    {
    }
}

Örnek kod ayrıca hostingStartupPackage adlı ayrı bir barındırma başlatması sağlayan bir NuGet paket projesi içerir. Paket, daha önce açıklanan sınıf kitaplığının aynı özelliklerine sahiptir. Paket:

  • uygulayan IHostingStartupbir barındırma başlangıç sınıfı ServiceKeyInjectioniçerir. ServiceKeyInjection uygulamanın yapılandırmasına bir çift hizmet dizesi ekler.
  • Bir HostingStartup öznitelik içerir.

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);
            });
        }
    }
}

Uygulamanın Dizin sayfası, paketin barındırma başlangıç derlemesi tarafından ayarlanan iki anahtar için yapılandırma değerlerini okur ve işler:

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()
    {
    }
}

Giriş noktası olmayan konsol uygulaması

Bu yaklaşım .NET Framework'te değil yalnızca .NET Core uygulamalarında kullanılabilir.

Etkinleştirme için derleme zamanı başvurusu gerektirmeyen dinamik barındırma başlatma geliştirmesi, öznitelik içeren HostingStartup bir giriş noktası olmayan bir konsol uygulamasında sağlanabilir. Konsol uygulamasını yayımlamak, çalışma zamanı deposundan kullanılabilecek bir barındırma başlangıç derlemesi oluşturur.

Bu işlemde giriş noktası olmayan bir konsol uygulaması kullanılır çünkü:

  • Barındırma başlatma derlemesinde barındırma başlangıcını kullanmak için bir bağımlılık dosyası gereklidir. Bağımlılıklar dosyası, kitaplık değil, uygulama yayımlanarak oluşturulan çalıştırılabilir bir uygulama varlığıdır.
  • Kitaplık, paylaşılan çalışma zamanını hedefleyen çalıştırılabilir bir proje gerektiren çalışma zamanı paket deposuna doğrudan eklenemez.

Dinamik bir barındırma başlatmasının oluşturulmasında:

  • Şu giriş noktası olmadan konsol uygulamasından bir barındırma başlangıç derlemesi oluşturulur:
    • Uygulamayı içeren IHostingStartup bir sınıf içerir.
    • Uygulama sınıfını tanımlamak IHostingStartup için bir HostingStartup özniteliği içerir.
  • Konsol uygulaması, barındırma başlangıcının bağımlılıklarını almak için yayımlanır. Konsol uygulamasını yayımlamanın bir sonucu, kullanılmayan bağımlılıkların bağımlılıklar dosyasından kırpılmış olmasıdır.
  • Bağımlılıklar dosyası, barındırma başlangıç derlemesinin çalışma zamanı konumunu ayarlamak için değiştirilir.
  • Barındırma başlangıç derlemesi ve bağımlılıkları dosyası çalışma zamanı paket deposuna yerleştirilir. Barındırma başlangıç derlemesini ve bağımlılık dosyasını bulmak için, bunlar bir ortam değişkenleri çiftinde listelenir.

Konsol uygulaması Microsoft.AspNetCore.Hosting.Abstractions paketine başvurur:

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

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

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

</Project>

HostingStartup özniteliği, bir sınıfını IHostingStartup oluştururken IWebHostyükleme ve yürütme için bir uygulaması olarak tanımlar. Aşağıdaki örnekte ad alanı , StartupEnhancementsınıfı ise :StartupEnhancementHostingStartup

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

Bir sınıf uygular IHostingStartup. Sınıfın Configure yöntemi, bir IWebHostBuilder uygulamaya iyileştirmeler eklemek için kullanır. IHostingStartup.Configure içinde barındırma başlangıç derlemesi, kullanıcı kodunda çalışma Startup.Configure zamanı tarafından çağrılır ve bu da kullanıcı kodunun barındırma başlatma derlemesi tarafından sağlanan tüm yapılandırmaların üzerine yazılmasına olanak tanır.

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

Proje IHostingStartup oluştururken bağımlılık dosyası (.deps.json) derlemenin konumunu bin klasörüne ayarlarruntime:

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

Dosyanın yalnızca bir bölümü gösterilir. Örnekteki derleme adı şeklindedir StartupEnhancement.

Barındırma başlangıcı tarafından sağlanan yapılandırma

Barındırma başlatma yapılandırmasının öncelikli olmasını mı yoksa uygulamanın yapılandırmasının mı öncelikli olmasını istediğinize bağlı olarak yapılandırmayı işlemeye yönelik iki yaklaşım vardır:

  1. Uygulama temsilcileri yürütülürken yapılandırmayı yüklemek için kullanarak ConfigureAppConfiguration uygulamaya ConfigureAppConfiguration yapılandırma sağlayın. Barındırma başlangıç yapılandırması, bu yaklaşımı kullanarak uygulamanın yapılandırmasından önceliklidir.
  2. Uygulama temsilcileri yürütülmeden önce yapılandırmayı yüklemek için kullanarak UseConfiguration uygulamaya ConfigureAppConfiguration yapılandırma sağlayın. Uygulamanın yapılandırma değerleri, bu yaklaşımı kullanarak barındırma başlangıcı tarafından sağlananlara göre önceliklidir.
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);
    }
}

Barındırma başlangıç derlemesini belirtme

Sınıf kitaplığı veya konsol uygulaması tarafından sağlanan barındırma başlatması için, ortam değişkeninde barındırma başlangıç derlemesinin ASPNETCORE_HOSTINGSTARTUPASSEMBLIES adını belirtin. Ortam değişkeni, derlemelerin noktalı virgülle ayrılmış bir listesidir.

Öznitelik için HostingStartup yalnızca barındırma başlangıç derlemeleri taranır. HostingStartupApp örnek uygulaması için, daha önce açıklanan barındırma başlangıçlarını bulmak için ortam değişkeni aşağıdaki değere ayarlanır:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Barındırma başlangıç derlemesi, Barındırma Başlangıç Derlemeleri ana bilgisayar yapılandırma ayarı kullanılarak da ayarlanabilir:

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

Yer {ASSEMBLY1;ASSEMBLY2; ...} tutucu, derlemelerin noktalı virgülle ayrılmış listesini temsil eder.

Birden çok barındırma başlangıç derlemesi mevcut olduğunda, Configure yöntemleri derlemelerin listelendiği sırayla yürütülür.

Etkinleştirme

Barındırma başlatma etkinleştirme seçenekleri şunlardır:

  • Çalışma zamanı deposu: Etkinleştirme için derleme zamanı başvurusu gerekmez. Örnek uygulama, barındırma başlatma derlemesini ve bağımlılık dosyalarını çok makineli bir ortamda barındırma başlangıcının dağıtımını kolaylaştırmak için bir klasöre, dağıtıma yerleştirir. Dağıtım klasörü, barındırma başlatmayı etkinleştirmek için dağıtım sisteminde ortam değişkenleri oluşturan veya değiştiren bir PowerShell betiği de içerir.
  • Etkinleştirme için derleme zamanı başvurusu gerekiyor

Çalışma zamanı deposu

Barındırma başlatma uygulaması çalışma zamanı deposuna yerleştirilir. Derlemeye derleme zamanı başvurusu, gelişmiş uygulama için gerekli değildir.

Barındırma başlatma oluşturulduktan sonra bildirim projesi dosyası ve dotnet store komutu kullanılarak bir çalışma zamanı deposu oluşturulur.

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

Örnek uygulamada (RuntimeStore projesi) aşağıdaki komut kullanılır:

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

Çalışma zamanının çalışma zamanı depoyu bulması için çalışma zamanı deposunun konumu ortam değişkenine DOTNET_SHARED_STORE eklenir.

Barındırma başlangıcının bağımlılıkları dosyasını değiştirme ve yerleştirme

Geliştirmeye bir paket başvurusu olmadan geliştirmeyi etkinleştirmek için ile additionalDepsçalışma zamanına ek bağımlılıklar belirtin. additionalDeps şunları yapmanızı sağlar:

  • Başlangıçta uygulamanın kendi .deps.json dosyasıyla birleştirmek için bir dizi ek .deps.json dosya sağlayarak uygulamanın kitaplık grafiğini genişletin.
  • Barındırma başlatma derlemesini bulunabilir ve yüklenebilir hale getirin.

Ek bağımlılıklar dosyasını oluşturmak için önerilen yaklaşım:

  1. Önceki bölümde başvuruda bulunılan çalışma zamanı deposu bildirim dosyasında yürütebilirsiniz dotnet publish .
  2. Kitaplıklardan bildirim başvuruyu ve sonuçta .deps.json elde edilen runtime dosyanın bölümünü kaldırın.

Örnek projedestore.manifest/1.0.0, özelliği ve libraries bölümünden targets kaldırılır:

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

.deps.json Dosyayı aşağıdaki konuma yerleştirin:

{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
  • {ADDITIONAL DEPENDENCIES PATH}: Ortam değişkenine DOTNET_ADDITIONAL_DEPS eklenen konum.
  • {SHARED FRAMEWORK NAME}: Bu ek bağımlılık dosyası için paylaşılan çerçeve gereklidir.
  • {SHARED FRAMEWORK VERSION}: En düşük paylaşılan çerçeve sürümü.
  • {ENHANCEMENT ASSEMBLY NAME}: Geliştirmenin derleme adı.

Örnek uygulamada (RuntimeStore projesi), ek bağımlılıklar dosyası aşağıdaki konuma yerleştirilir:

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

Çalışma zamanının çalışma zamanı deposu konumunu bulması için ek bağımlılıklar dosya konumu ortam değişkenine DOTNET_ADDITIONAL_DEPS eklenir.

Örnek uygulamada (RuntimeStore projesi), çalışma zamanı deposunu oluşturma ve ek bağımlılıklar dosyası oluşturma işlemi bir PowerShell betiği kullanılarak gerçekleştirilir.

Çeşitli işletim sistemleri için ortam değişkenlerini ayarlama örnekleri için bkz . Birden çok ortam kullanma.

Dağıtım

Çok makineli bir ortamda barındırma başlangıcının dağıtımını kolaylaştırmak için örnek uygulama, yayımlanan çıktıda şunları içeren bir dağıtım klasörü oluşturur:

  • Barındırma başlangıç çalışma zamanı deposu.
  • Barındırma başlangıç bağımlılıkları dosyası.
  • Barındırma başlangıcının etkinleştirilmesini ASPNETCORE_HOSTINGSTARTUPASSEMBLIESdesteklemek için , DOTNET_SHARED_STOREve DOTNET_ADDITIONAL_DEPS öğesini oluşturan veya değiştiren bir PowerShell betiği. Betiği dağıtım sistemindeki bir yönetim PowerShell komut isteminden çalıştırın.

NuGet paketi

NuGet paketinde barındırma başlatma geliştirmesi sağlanabilir. Paketin bir HostingStartup özniteliği vardır. Paket tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulamanın kullanımına sunulur:

NuGet paketleri ve çalışma zamanı deposu hakkında daha fazla bilgi için aşağıdaki konulara bakın:

Proje bölmesi klasörü

Barındırma başlatma geliştirmesi, iyileştirilmiş uygulamada bin dağıtılan bir derleme tarafından sağlanabilir. Derleme tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulamanın kullanımına sunulur:

  • Gelişmiş uygulamanın proje dosyası, barındırma başlangıcına bir derleme başvurusu yapar (derleme zamanı başvurusu). Derleme zamanı başvurusu gerçekleştiğinde, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.json ) eklenir. Bu yaklaşım, dağıtım senaryosu barındırma başlangıcının derlemesine (.dll dosyası) derleme zamanı başvurusu yapmayı ve derlemeyi ikisine de taşımayı çağırdığında geçerlidir:
    • Tüketen proje.
    • Tüketen proje tarafından erişilebilen bir konum.
  • Barındırma başlangıcının bağımlılık dosyası, Çalışma Zamanı deposu bölümünde açıklandığı gibi (derleme zamanı başvurusu olmadan) gelişmiş uygulamanın kullanımına sunulur.
  • .NET Framework hedeflenirken, derleme varsayılan yük bağlamında yüklenebilir. Bu, .NET Framework'te derlemenin aşağıdaki konumlardan birinde bulunduğu anlamına gelir:
    • Uygulama temel yolu: Uygulamanın yürütülebilir dosyasının (.exe) bulunduğu bin klasörü.
    • Genel Derleme Önbelleği (GAC): GAC, birkaç .NET Framework uygulamasının paylaştığı derlemeleri depolar. Daha fazla bilgi için .NET Framework belgelerindeki Nasıl yapılır: Genel derleme önbelleğine derleme yükleme bölümüne bakın.

Örnek kod

Örnek kod (nasıl indirilir) barındırma başlatma uygulama senaryolarını gösterir:

  • İki barındırma başlangıç derlemesi (sınıf kitaplıkları) her biri bir çift bellek içi yapılandırma anahtar-değer çifti ayarlar:
    • NuGet paketi (HostingStartupPackage)
    • Sınıf kitaplığı (HostingStartupLibrary)
  • Barındırma başlatması, çalışma zamanı deposu tarafından dağıtılan bir derlemeden (StartupDiagnostics) etkinleştirilir. Derleme başlangıçta uygulamaya tanılama bilgileri sağlayan iki ara yazılım ekler:
    • Kayıtlı hizmetler
    • Adres (şema, konak, yol tabanı, yol, sorgu dizesi)
    • Bağlan ion (uzak IP, uzak bağlantı noktası, yerel IP, yerel bağlantı noktası, istemci sertifikası)
    • İstek üst bilgileri
    • Ortam değişkenleri

Örneği çalıştırmak için:

NuGet paketinden etkinleştirme

  1. HostingStartupPackage paketini dotnet pack komutuyla derleyin.

  2. Paketin HostingStartupPackage derleme adını ortam değişkenine ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ekleyin.

  3. Uygulamayı derleyin ve çalıştırın. Gelişmiş uygulamada bir paket başvurusu (derleme zamanı başvurusu) bulunur. Uygulamanın proje dosyasındaki A <PropertyGroup> , paket projesinin çıkışını (.. Paket kaynağı olarak /HostingStartupPackage/bin/Debug). Bu, uygulamanın paketi nuget.org yüklemeden kullanmasını sağlar. Daha fazla bilgi için HostingStartupApp'in proje dosyasındaki notlara bakın.

    <PropertyGroup>
      <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources>
    </PropertyGroup>
    
  4. Dizin sayfası tarafından işlenen hizmet yapılandırma anahtarı değerlerinin paketin ServiceKeyInjection.Configure yöntemi tarafından ayarlanan değerlerle eşleştiğinden emin olun.

HostingStartupPackage projesinde değişiklik yapıp yeniden derlerseniz, HostingStartupApp'in yerel önbellekten eski bir paket değil güncelleştirilmiş paketi aldığından emin olmak için yerel NuGet paketi önbelleklerini temizleyin. Yerel NuGet önbelleklerini temizlemek için aşağıdaki dotnet nuget locals komutunu yürütür:

dotnet nuget locals all --clear

Sınıf kitaplığından etkinleştirme

  1. HostingStartupLibrary sınıf kitaplığını dotnet build komutuyla derleyin.

  2. Ortam değişkenine sınıf kitaplığının HostingStartupLibraryASPNETCORE_HOSTINGSTARTUPASSEMBLIES derleme adını ekleyin.

  3. sınıf kitaplığının derlenmiş çıktısından HostingStartupLibrary.dll dosyasını uygulamanın bin/Debug klasörüne kopyalayarak sınıf kitaplığının derlemesini uygulamaya dağıtın.

  4. Uygulamayı derleyin ve çalıştırın. Uygulamanın proje dosyasındaki bir <ItemGroup> , sınıf kitaplığının derlemesine (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) (derleme zamanı başvurusu) başvurur. Daha fazla bilgi için HostingStartupApp'in proje dosyasındaki notlara bakın.

    <ItemGroup>
      <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll">
        <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath>
        <SpecificVersion>False</SpecificVersion> 
      </Reference>
    </ItemGroup>
    
  5. Dizin sayfası tarafından işlenen hizmet yapılandırma anahtarı değerlerinin sınıf kitaplığının ServiceKeyInjection.Configure yöntemi tarafından ayarlanan değerlerle eşleştiğinden emin olun.

Çalışma zamanı deposu tarafından dağıtılan derlemeden etkinleştirme

  1. StartupDiagnostics projesi, dosyasını değiştirmek StartupDiagnostics.deps.json için PowerShell kullanır. PowerShell, Windows 7 SP1 ve Windows Server 2008 R2 SP1'den başlayarak Windows'a varsayılan olarak yüklenir. Diğer platformlarda PowerShell'i edinmek için bkz . PowerShell'in çeşitli sürümlerini yükleme.
  2. RuntimeStore klasöründe build.ps1 betiğini yürütür. Betik:
    • StartupDiagnostics paketi obj\packages klasöründe oluşturur.
    • depo klasöründe için StartupDiagnostics çalışma zamanı depoyu oluşturur. Betikteki dotnet store komut, Windows'a dağıtılan bir barındırma başlangıcı için çalışma zamanı tanımlayıcısını (RID) kullanırwin7-x64. Barındırma başlatmasını farklı bir çalışma zamanı için sağlarken, betiğin 37. satırında doğru RID'yi kullanın. için StartupDiagnostics çalışma zamanı deposu daha sonra derlemenin tüketileceği makinede kullanıcının veya sistemin çalışma zamanı deposuna taşınır. Derleme için StartupDiagnostics kullanıcı çalışma zamanı deposu yükleme konumu .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll'dir.
    • için öğesini additionalDepsStartupDiagnosticsadditionalDeps klasöründe oluşturur. Ek bağımlılıklar daha sonra kullanıcının veya sistemin ek bağımlılıklarına taşınır. Kullanıcı StartupDiagnostics ek bağımlılıkları yükleme konumudur .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json.
    • deploy.ps1 dosyasını dağıtım klasörüne yerleştirir.
  3. deploy.ps1 betiğini dağıtım klasöründe çalıştırın. Betik ekler:
    • StartupDiagnostics ortam değişkenine geçin ASPNETCORE_HOSTINGSTARTUPASSEMBLIES .
    • Barındırma başlangıç bağımlılıkları yolu (RuntimeStore projesinin dağıtım klasöründe) ortam değişkenine DOTNET_ADDITIONAL_DEPS .
    • Çalışma zamanı depolama yolu (RuntimeStore projesinin dağıtım klasöründe) ortam değişkenine DOTNET_SHARED_STORE .
  4. Örnek uygulamayı çalıştırın.
  5. /services Uygulamanın kayıtlı hizmetlerini görmek için uç noktayı isteyin. /diag Tanılama bilgilerini görmek için uç noktayı isteyin.

Bir IHostingStartup (barındırma başlatması) uygulaması, bir dış derlemeden başlatma sırasında uygulamaya iyileştirmeler ekler. Örneğin, bir dış kitaplık, bir uygulamaya ek yapılandırma sağlayıcıları veya hizmetler sağlamak için barındırma başlangıç uygulamasını kullanabilir.

Örnek kodu görüntüleme veya indirme (indirme)

HostingStartup özniteliği

HostingStartup özniteliği, çalışma zamanında etkinleştirilen bir barındırma başlatma derlemesinin varlığını gösterir.

Giriş derlemesi veya sınıfını Startup içeren derleme özniteliği için HostingStartup otomatik olarak taranır. Öznitelikleri aramak için HostingStartup derlemelerin listesi, WebHostDefaults.HostingStartupAssembliesKey'deki yapılandırmadan çalışma zamanında yüklenir. Bulmanın dışında tutulacak derlemelerin listesi WebHostDefaults.HostingStartupExcludeAssembliesKey dosyasından yüklenir. Daha fazla bilgi için bkz . Web Ana Bilgisayarı: Başlangıç Derlemelerini Barındırma ve Web Ana Bilgisayarı: Başlangıç Dışlama Derlemelerini Barındırma.

Aşağıdaki örnekte, barındırma başlangıç derlemesinin ad alanı şeklindedir StartupEnhancement. Barındırma başlangıç kodunu içeren sınıf:StartupEnhancementHostingStartup

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

HostingStartup özniteliği genellikle barındırma başlangıç derlemesinin IHostingStartup uygulama sınıfı dosyasında bulunur.

Yüklü barındırma başlangıç derlemelerini bulma

Yüklü barındırma başlangıç derlemelerini bulmak için günlüğe kaydetmeyi etkinleştirin ve uygulamanın günlüklerini denetleyin. Derlemeler yüklenirken oluşan hatalar günlüğe kaydedilir. Yüklenen barındırma başlangıç derlemeleri Hata ayıklama düzeyinde günlüğe kaydedilir ve tüm hatalar günlüğe kaydedilir.

Barındırma başlangıç derlemelerinin otomatik yüklenmesini devre dışı bırakma

Barındırma başlangıç derlemelerinin otomatik yüklenmesini devre dışı bırakmak için aşağıdaki yaklaşımlardan birini kullanın:

  • Tüm barındırma başlangıç derlemelerinin yüklenmesini önlemek için, aşağıdakilerden birini veya 1olarak true ayarlayın:
    • Barındırma Başlangıç ana bilgisayar yapılandırma ayarını engelle.
    • ASPNETCORE_PREVENTHOSTINGSTARTUP ortam değişkeni.
  • Belirli barındırma başlatma derlemelerinin yüklenmesini önlemek için, aşağıdakilerden birini başlangıçta hariç tutulacak şekilde noktalı virgülle ayrılmış bir barındırma başlangıç derlemesi dizesine ayarlayın:

Hem konak yapılandırma ayarı hem de ortam değişkeni ayarlanırsa, konak ayarı davranışı denetler.

Konak ayarını veya ortam değişkenini kullanarak barındırma başlangıç derlemelerini devre dışı bırakmak derlemeyi genel olarak devre dışı bırakır ve bir uygulamanın çeşitli özelliklerini devre dışı bırakabilir.

Project

Aşağıdaki proje türlerinden biriyle barındırma başlatması oluşturun:

Sınıf kitaplığı

Bir sınıf kitaplığında barındırma başlatma geliştirmesi sağlanabilir. Kitaplık bir HostingStartup öznitelik içerir.

Örnek kod bir Razor Pages uygulaması, HostingStartupApp ve HostingStartupLibrary sınıf kitaplığı içerir. Sınıf kitaplığı:

  • uygulayan IHostingStartupbir barındırma başlangıç sınıfı ServiceKeyInjectioniçerir. ServiceKeyInjection , bellek içi yapılandırma sağlayıcısını (AddInMemoryCollection) kullanarak uygulamanın yapılandırmasına bir çift hizmet dizesi ekler.
  • Barındırma başlangıcının ad alanını ve sınıfını tanımlayan bir HostingStartup öznitelik içerir.

Sınıfın ServiceKeyInjectionConfigure yöntemi, bir IWebHostBuilder uygulamaya iyileştirmeler eklemek için kullanır.

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);
            });
        }
    }
}

Uygulamanın Dizin sayfası, sınıf kitaplığının barındırma başlangıç derlemesi tarafından ayarlanan iki anahtar için yapılandırma değerlerini okur ve işler:

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()
    {
    }
}

Örnek kod ayrıca hostingStartupPackage adlı ayrı bir barındırma başlatması sağlayan bir NuGet paket projesi içerir. Paket, daha önce açıklanan sınıf kitaplığının aynı özelliklerine sahiptir. Paket:

  • uygulayan IHostingStartupbir barındırma başlangıç sınıfı ServiceKeyInjectioniçerir. ServiceKeyInjection uygulamanın yapılandırmasına bir çift hizmet dizesi ekler.
  • Bir HostingStartup öznitelik içerir.

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);
            });
        }
    }
}

Uygulamanın Dizin sayfası, paketin barındırma başlangıç derlemesi tarafından ayarlanan iki anahtar için yapılandırma değerlerini okur ve işler:

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()
    {
    }
}

Giriş noktası olmayan konsol uygulaması

Bu yaklaşım .NET Framework'te değil yalnızca .NET Core uygulamalarında kullanılabilir.

Etkinleştirme için derleme zamanı başvurusu gerektirmeyen dinamik barındırma başlatma geliştirmesi, öznitelik içeren HostingStartup bir giriş noktası olmayan bir konsol uygulamasında sağlanabilir. Konsol uygulamasını yayımlamak, çalışma zamanı deposundan kullanılabilecek bir barındırma başlangıç derlemesi oluşturur.

Bu işlemde giriş noktası olmayan bir konsol uygulaması kullanılır çünkü:

  • Barındırma başlatma derlemesinde barındırma başlangıcını kullanmak için bir bağımlılık dosyası gereklidir. Bağımlılıklar dosyası, kitaplık değil, uygulama yayımlanarak oluşturulan çalıştırılabilir bir uygulama varlığıdır.
  • Kitaplık, paylaşılan çalışma zamanını hedefleyen çalıştırılabilir bir proje gerektiren çalışma zamanı paket deposuna doğrudan eklenemez.

Dinamik bir barındırma başlatmasının oluşturulmasında:

  • Şu giriş noktası olmadan konsol uygulamasından bir barındırma başlangıç derlemesi oluşturulur:
    • Uygulamayı içeren IHostingStartup bir sınıf içerir.
    • Uygulama sınıfını tanımlamak IHostingStartup için bir HostingStartup özniteliği içerir.
  • Konsol uygulaması, barındırma başlangıcının bağımlılıklarını almak için yayımlanır. Konsol uygulamasını yayımlamanın bir sonucu, kullanılmayan bağımlılıkların bağımlılıklar dosyasından kırpılmış olmasıdır.
  • Bağımlılıklar dosyası, barındırma başlangıç derlemesinin çalışma zamanı konumunu ayarlamak için değiştirilir.
  • Barındırma başlangıç derlemesi ve bağımlılıkları dosyası çalışma zamanı paket deposuna yerleştirilir. Barındırma başlangıç derlemesini ve bağımlılık dosyasını bulmak için, bunlar bir ortam değişkenleri çiftinde listelenir.

Konsol uygulaması Microsoft.AspNetCore.Hosting.Abstractions paketine başvurur:

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

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

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

</Project>

HostingStartup özniteliği, bir sınıfını IHostingStartup oluştururken IWebHostyükleme ve yürütme için bir uygulaması olarak tanımlar. Aşağıdaki örnekte ad alanı , StartupEnhancementsınıfı ise :StartupEnhancementHostingStartup

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

Bir sınıf uygular IHostingStartup. Sınıfın Configure yöntemi, bir IWebHostBuilder uygulamaya iyileştirmeler eklemek için kullanır. IHostingStartup.Configure içinde barındırma başlangıç derlemesi, kullanıcı kodunda çalışma Startup.Configure zamanı tarafından çağrılır ve bu da kullanıcı kodunun barındırma başlatma derlemesi tarafından sağlanan tüm yapılandırmaların üzerine yazılmasına olanak tanır.

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

Proje IHostingStartup oluştururken bağımlılık dosyası (.deps.json) derlemenin konumunu bin klasörüne ayarlarruntime:

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

Dosyanın yalnızca bir bölümü gösterilir. Örnekteki derleme adı şeklindedir StartupEnhancement.

Barındırma başlangıcı tarafından sağlanan yapılandırma

Barındırma başlatma yapılandırmasının öncelikli olmasını mı yoksa uygulamanın yapılandırmasının mı öncelikli olmasını istediğinize bağlı olarak yapılandırmayı işlemeye yönelik iki yaklaşım vardır:

  1. Uygulama temsilcileri yürütülürken yapılandırmayı yüklemek için kullanarak ConfigureAppConfiguration uygulamaya ConfigureAppConfiguration yapılandırma sağlayın. Barındırma başlangıç yapılandırması, bu yaklaşımı kullanarak uygulamanın yapılandırmasından önceliklidir.
  2. Uygulama temsilcileri yürütülmeden önce yapılandırmayı yüklemek için kullanarak UseConfiguration uygulamaya ConfigureAppConfiguration yapılandırma sağlayın. Uygulamanın yapılandırma değerleri, bu yaklaşımı kullanarak barındırma başlangıcı tarafından sağlananlara göre önceliklidir.
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);
    }
}

Barındırma başlangıç derlemesini belirtme

Sınıf kitaplığı veya konsol uygulaması tarafından sağlanan barındırma başlatması için, ortam değişkeninde barındırma başlangıç derlemesinin ASPNETCORE_HOSTINGSTARTUPASSEMBLIES adını belirtin. Ortam değişkeni, derlemelerin noktalı virgülle ayrılmış bir listesidir.

Öznitelik için HostingStartup yalnızca barındırma başlangıç derlemeleri taranır. HostingStartupApp örnek uygulaması için, daha önce açıklanan barındırma başlangıçlarını bulmak için ortam değişkeni aşağıdaki değere ayarlanır:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Barındırma başlangıç derlemesi, Barındırma Başlangıç Derlemeleri ana bilgisayar yapılandırma ayarı kullanılarak da ayarlanabilir.

Birden çok barındırma başlangıç derlemesi mevcut olduğunda, Configure yöntemleri derlemelerin listelendiği sırayla yürütülür.

Etkinleştirme

Barındırma başlatma etkinleştirme seçenekleri şunlardır:

  • Çalışma zamanı deposu: Etkinleştirme için derleme zamanı başvurusu gerekmez. Örnek uygulama, barındırma başlatma derlemesini ve bağımlılık dosyalarını çok makineli bir ortamda barındırma başlangıcının dağıtımını kolaylaştırmak için bir klasöre, dağıtıma yerleştirir. Dağıtım klasörü, barındırma başlatmayı etkinleştirmek için dağıtım sisteminde ortam değişkenleri oluşturan veya değiştiren bir PowerShell betiği de içerir.
  • Etkinleştirme için derleme zamanı başvurusu gerekiyor

Çalışma zamanı deposu

Barındırma başlatma uygulaması çalışma zamanı deposuna yerleştirilir. Derlemeye derleme zamanı başvurusu, gelişmiş uygulama için gerekli değildir.

Barındırma başlatma oluşturulduktan sonra bildirim projesi dosyası ve dotnet store komutu kullanılarak bir çalışma zamanı deposu oluşturulur.

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

Örnek uygulamada (RuntimeStore projesi) aşağıdaki komut kullanılır:

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

Çalışma zamanının çalışma zamanı depoyu bulması için çalışma zamanı deposunun konumu ortam değişkenine DOTNET_SHARED_STORE eklenir.

Barındırma başlangıcının bağımlılıkları dosyasını değiştirme ve yerleştirme

Geliştirmeye bir paket başvurusu olmadan geliştirmeyi etkinleştirmek için ile additionalDepsçalışma zamanına ek bağımlılıklar belirtin. additionalDeps şunları yapmanızı sağlar:

  • Başlangıçta uygulamanın kendi .deps.json dosyasıyla birleştirmek için bir dizi ek .deps.json dosya sağlayarak uygulamanın kitaplık grafiğini genişletin.
  • Barındırma başlatma derlemesini bulunabilir ve yüklenebilir hale getirin.

Ek bağımlılıklar dosyasını oluşturmak için önerilen yaklaşım:

  1. Önceki bölümde başvuruda bulunılan çalışma zamanı deposu bildirim dosyasında yürütebilirsiniz dotnet publish .
  2. Kitaplıklardan bildirim başvuruyu ve sonuçta .deps.json elde edilen runtime dosyanın bölümünü kaldırın.

Örnek projedestore.manifest/1.0.0, özelliği ve libraries bölümünden targets kaldırılır:

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

.deps.json Dosyayı aşağıdaki konuma yerleştirin:

{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
  • {ADDITIONAL DEPENDENCIES PATH}: Ortam değişkenine DOTNET_ADDITIONAL_DEPS eklenen konum.
  • {SHARED FRAMEWORK NAME}: Bu ek bağımlılık dosyası için paylaşılan çerçeve gereklidir.
  • {SHARED FRAMEWORK VERSION}: En düşük paylaşılan çerçeve sürümü.
  • {ENHANCEMENT ASSEMBLY NAME}: Geliştirmenin derleme adı.

Örnek uygulamada (RuntimeStore projesi), ek bağımlılıklar dosyası aşağıdaki konuma yerleştirilir:

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

Çalışma zamanının çalışma zamanı deposu konumunu bulması için ek bağımlılıklar dosya konumu ortam değişkenine DOTNET_ADDITIONAL_DEPS eklenir.

Örnek uygulamada (RuntimeStore projesi), çalışma zamanı deposunu oluşturma ve ek bağımlılıklar dosyası oluşturma işlemi bir PowerShell betiği kullanılarak gerçekleştirilir.

Çeşitli işletim sistemleri için ortam değişkenlerini ayarlama örnekleri için bkz . Birden çok ortam kullanma.

Dağıtım

Çok makineli bir ortamda barındırma başlangıcının dağıtımını kolaylaştırmak için örnek uygulama, yayımlanan çıktıda şunları içeren bir dağıtım klasörü oluşturur:

  • Barındırma başlangıç çalışma zamanı deposu.
  • Barındırma başlangıç bağımlılıkları dosyası.
  • Barındırma başlangıcının etkinleştirilmesini ASPNETCORE_HOSTINGSTARTUPASSEMBLIESdesteklemek için , DOTNET_SHARED_STOREve DOTNET_ADDITIONAL_DEPS öğesini oluşturan veya değiştiren bir PowerShell betiği. Betiği dağıtım sistemindeki bir yönetim PowerShell komut isteminden çalıştırın.

NuGet paketi

NuGet paketinde barındırma başlatma geliştirmesi sağlanabilir. Paketin bir HostingStartup özniteliği vardır. Paket tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulamanın kullanımına sunulur:

NuGet paketleri ve çalışma zamanı deposu hakkında daha fazla bilgi için aşağıdaki konulara bakın:

Proje bölmesi klasörü

Barındırma başlatma geliştirmesi, iyileştirilmiş uygulamada bin dağıtılan bir derleme tarafından sağlanabilir. Derleme tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulamanın kullanımına sunulur:

  • Gelişmiş uygulamanın proje dosyası, barındırma başlangıcına bir derleme başvurusu yapar (derleme zamanı başvurusu). Derleme zamanı başvurusu gerçekleştiğinde, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.json ) eklenir. Bu yaklaşım, dağıtım senaryosu barındırma başlangıcının derlemesine (.dll dosyası) derleme zamanı başvurusu yapmayı ve derlemeyi ikisine de taşımayı çağırdığında geçerlidir:
    • Tüketen proje.
    • Tüketen proje tarafından erişilebilen bir konum.
  • Barındırma başlangıcının bağımlılık dosyası, Çalışma Zamanı deposu bölümünde açıklandığı gibi (derleme zamanı başvurusu olmadan) gelişmiş uygulamanın kullanımına sunulur.
  • .NET Framework hedeflenirken, derleme varsayılan yük bağlamında yüklenebilir. Bu, .NET Framework'te derlemenin aşağıdaki konumlardan birinde bulunduğu anlamına gelir:
    • Uygulama temel yolu: Uygulamanın yürütülebilir dosyasının (.exe) bulunduğu bin klasörü.
    • Genel Derleme Önbelleği (GAC): GAC, birkaç .NET Framework uygulamasının paylaştığı derlemeleri depolar. Daha fazla bilgi için .NET Framework belgelerindeki Nasıl yapılır: Genel derleme önbelleğine derleme yükleme bölümüne bakın.

Örnek kod

Örnek kod (nasıl indirilir) barındırma başlatma uygulama senaryolarını gösterir:

  • İki barındırma başlangıç derlemesi (sınıf kitaplıkları) her biri bir çift bellek içi yapılandırma anahtar-değer çifti ayarlar:
    • NuGet paketi (HostingStartupPackage)
    • Sınıf kitaplığı (HostingStartupLibrary)
  • Barındırma başlatması, çalışma zamanı deposu tarafından dağıtılan bir derlemeden (StartupDiagnostics) etkinleştirilir. Derleme başlangıçta uygulamaya tanılama bilgileri sağlayan iki ara yazılım ekler:
    • Kayıtlı hizmetler
    • Adres (şema, konak, yol tabanı, yol, sorgu dizesi)
    • Bağlan ion (uzak IP, uzak bağlantı noktası, yerel IP, yerel bağlantı noktası, istemci sertifikası)
    • İstek üst bilgileri
    • Ortam değişkenleri

Örneği çalıştırmak için:

NuGet paketinden etkinleştirme

  1. HostingStartupPackage paketini dotnet pack komutuyla derleyin.

  2. Paketin HostingStartupPackage derleme adını ortam değişkenine ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ekleyin.

  3. Uygulamayı derleyin ve çalıştırın. Gelişmiş uygulamada bir paket başvurusu (derleme zamanı başvurusu) bulunur. Uygulamanın proje dosyasındaki A <PropertyGroup> , paket projesinin çıkışını (.. Paket kaynağı olarak /HostingStartupPackage/bin/Debug). Bu, uygulamanın paketi nuget.org yüklemeden kullanmasını sağlar. Daha fazla bilgi için HostingStartupApp'in proje dosyasındaki notlara bakın.

    <PropertyGroup>
      <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources>
    </PropertyGroup>
    
  4. Dizin sayfası tarafından işlenen hizmet yapılandırma anahtarı değerlerinin paketin ServiceKeyInjection.Configure yöntemi tarafından ayarlanan değerlerle eşleştiğinden emin olun.

HostingStartupPackage projesinde değişiklik yapıp yeniden derlerseniz, HostingStartupApp'in yerel önbellekten eski bir paket değil güncelleştirilmiş paketi aldığından emin olmak için yerel NuGet paketi önbelleklerini temizleyin. Yerel NuGet önbelleklerini temizlemek için aşağıdaki dotnet nuget locals komutunu yürütür:

dotnet nuget locals all --clear

Sınıf kitaplığından etkinleştirme

  1. HostingStartupLibrary sınıf kitaplığını dotnet build komutuyla derleyin.

  2. Ortam değişkenine sınıf kitaplığının HostingStartupLibraryASPNETCORE_HOSTINGSTARTUPASSEMBLIES derleme adını ekleyin.

  3. sınıf kitaplığının derlenmiş çıktısından HostingStartupLibrary.dll dosyasını uygulamanın bin/Debug klasörüne kopyalayarak sınıf kitaplığının derlemesini uygulamaya dağıtın.

  4. Uygulamayı derleyin ve çalıştırın. Uygulamanın proje dosyasındaki bir <ItemGroup> , sınıf kitaplığının derlemesine (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) (derleme zamanı başvurusu) başvurur. Daha fazla bilgi için HostingStartupApp'in proje dosyasındaki notlara bakın.

    <ItemGroup>
      <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll">
        <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath>
        <SpecificVersion>False</SpecificVersion>
      </Reference>
    </ItemGroup>
    
  5. Dizin sayfası tarafından işlenen hizmet yapılandırma anahtarı değerlerinin sınıf kitaplığının ServiceKeyInjection.Configure yöntemi tarafından ayarlanan değerlerle eşleştiğinden emin olun.

Çalışma zamanı deposu tarafından dağıtılan derlemeden etkinleştirme

  1. StartupDiagnostics projesi, dosyasını değiştirmek StartupDiagnostics.deps.json için PowerShell kullanır. PowerShell, Windows 7 SP1 ve Windows Server 2008 R2 SP1'den başlayarak Windows'a varsayılan olarak yüklenir. Diğer platformlarda PowerShell'i edinmek için bkz . PowerShell'in çeşitli sürümlerini yükleme.
  2. RuntimeStore klasöründe build.ps1 betiğini yürütür. Betik:
    • StartupDiagnostics paketi obj\packages klasöründe oluşturur.
    • depo klasöründe için StartupDiagnostics çalışma zamanı depoyu oluşturur. Betikteki dotnet store komut, Windows'a dağıtılan bir barındırma başlangıcı için çalışma zamanı tanımlayıcısını (RID) kullanırwin7-x64. Barındırma başlatmasını farklı bir çalışma zamanı için sağlarken, betiğin 37. satırında doğru RID'yi kullanın. için StartupDiagnostics çalışma zamanı deposu daha sonra derlemenin tüketileceği makinede kullanıcının veya sistemin çalışma zamanı deposuna taşınır. Derleme için StartupDiagnostics kullanıcı çalışma zamanı deposu yükleme konumu .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll'dir.
    • için öğesini additionalDepsStartupDiagnosticsadditionalDeps klasöründe oluşturur. Ek bağımlılıklar daha sonra kullanıcının veya sistemin ek bağımlılıklarına taşınır. Kullanıcı StartupDiagnostics ek bağımlılıkları yükleme konumudur .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json.
    • deploy.ps1 dosyasını dağıtım klasörüne yerleştirir.
  3. deploy.ps1 betiğini dağıtım klasöründe çalıştırın. Betik ekler:
    • StartupDiagnostics ortam değişkenine geçin ASPNETCORE_HOSTINGSTARTUPASSEMBLIES .
    • Barındırma başlangıç bağımlılıkları yolu (RuntimeStore projesinin dağıtım klasöründe) ortam değişkenine DOTNET_ADDITIONAL_DEPS .
    • Çalışma zamanı depolama yolu (RuntimeStore projesinin dağıtım klasöründe) ortam değişkenine DOTNET_SHARED_STORE .
  4. Örnek uygulamayı çalıştırın.
  5. /services Uygulamanın kayıtlı hizmetlerini görmek için uç noktayı isteyin. /diag Tanılama bilgilerini görmek için uç noktayı isteyin.