ASP.NET Core 'de barındırma başlangıç derlemelerini kullanın

Palete kroni

IHostingStartup(Barındırma başlatma) uygulaması, bir dış derlemeden başlatma sırasında bir 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 (nasıl indirileceği)

HostingStartup özniteliği

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

Giriş derlemesi veya sınıfı içeren derleme Startup öznitelik için otomatik olarak taranır HostingStartup . Öznitelikleri aramak için derlemelerin listesi HostingStartup Webhostdefaults. HostingStartupAssembliesKeyiçindeki yapılandırmadan çalışma zamanında yüklenir. Bulmadan dışlanacak derlemelerin listesi Webhostdefaults. Hostingstartupexcludederlemelieskeyöğesinden yüklendi.

Aşağıdaki örnekte, barındırma başlangıç derlemesinin ad alanı 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 bul

Yüklü barındırma başlangıç derlemelerini öğrenmek için, günlüğü 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ırak

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 engellemek için aşağıdakilerden birini veya olarak ayarlayın true 1 :

    • Barındırma başlangıç ana bilgisayar yapılandırma ayarını önle:

      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şlangıç derlemelerinin yüklenmesini engellemek için aşağıdakilerden birini, başlangıçta dışlamak üzere, bir barındırma başlangıç bütünleştirilmiş kodlarının noktalı virgülle ayrılmış dizesine ayarlayın:

    • Barındırma başlatma derlemeleri dışlama 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>();
              });
      

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

    • ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES ortam değişkeni.

Ana bilgisayar yapılandırma ayarı ve ortam değişkeni ayarlanırsa, konak ayarı davranışı denetler.

Konak ayarını veya ortam değişkenini kullanarak başlatma derlemelerinin barındırılmasını devre dışı bırakmak, derlemeyi küresel olarak devre dışı bırakabilir ve bir uygulamanın çeşitli özelliklerini devre dışı bırakabilir.

Project

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

Sınıf kitaplığı

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

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

  • Uygulayan bir barındırma başlangıç sınıfı içerir ServiceKeyInjection IHostingStartup . ServiceKeyInjection bellek içi yapılandırma sağlayıcısını (Addınmemorycollection) kullanarak uygulamanın yapılandırmasına bir hizmet dizesi çifti ekler.
  • HostingStartupBarındırma başlatmasının ad alanını ve sınıfını tanımlayan bir özniteliği içerir.

ServiceKeyInjectionSınıfın Configure yöntemi bir IWebHostBuilder uygulamaya geliştirmeler eklemek için bir 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ın 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 ayrı bir barındırma başlatma, hostingstartuppackage sağlayan bir NuGet paket projesi içerir. Paket, daha önce açıklanan sınıf kitaplığıyla aynı özelliklere sahiptir. Paket:

  • Uygulayan bir barındırma başlangıç sınıfı içerir ServiceKeyInjection IHostingStartup . ServiceKeyInjection uygulamanın yapılandırmasına bir hizmet dizesi çifti ekler.
  • Bir HostingStartup özniteliği 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ın 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 değil yalnızca .NET Core uygulamaları için kullanılabilir.

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

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

  • Barındırma başlangıç derlemesinde barındırma başlangıcını kullanmak için bir bağımlılıklar dosyası gereklidir. Bağımlılıklar dosyası, bir kitaplık değil bir uygulama yayımlamayla üretilen çalıştırılabilir bir uygulama varlıktır.
  • Bir kitaplık, paylaşılan çalışma zamanını hedefleyen bir çalıştırılabilir proje gerektiren çalışma zamanı paket deposunaeklenemez.

Dinamik barındırma başlatma oluşturma bölümünde:

  • Bir barındırma başlangıç derlemesi, konsol uygulamasından bir giriş noktası olmadan oluşturulur:
    • , Uygulamayı içeren bir sınıf içerir IHostingStartup .
    • Uygulama sınıfını tanımlamak için bir Hostingstartup özniteliği içerir IHostingStartup .
  • Konsol uygulaması, barındırma başlatması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ılları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 onun bağımlılıklar dosyası çalışma zamanı paket deposuna yerleştirilir. Barındırma başlangıç derlemesini ve onun bağımlılıklar dosyasını öğrenmek için, ortam değişkenleri çiftinde listelenir.

Konsol uygulaması Microsoft. AspNetCore. Hosting. soyutlamalar 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 yükleme ve yürütme için uygulamasının bir uygulamasını tanımlar IWebHost . Aşağıdaki örnekte, ad alanı StartupEnhancement ve sınıfı StartupEnhancementHostingStartup :

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

Bir sınıf uygular IHostingStartup . Sınıfın Configure yöntemi bir IWebHostBuilder uygulamaya geliştirmeler eklemek için bir kullanır. IHostingStartup.Configure barındırma başlangıç derlemesinde kullanıcı kodundan önce çalışma zamanı tarafından çağrılır Startup.Configure , bu da kullanıcı kodunun barındırma başlangıç derlemesi tarafından verilen yapılandırmanı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.
        }
    }
}

Bir proje oluştururken IHostingStartup , bağımlılıklar dosyası (.deps.js), runtime derlemenin konumunu bin klasörüne ayarlar:

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

Yalnızca dosyanın bir kısmı gösterilir. Örnekteki derleme adı StartupEnhancement .

Barındırma başlatma tarafından belirtilen yapılandırma

Yapılandırma işlemi, barındırma başlatmasının yapılandırmasının öncelikli olmasını mı yoksa uygulamanın yapılandırmasının öncelikli olmasını mı istediğinize bağlı olarak iki yaklaşımdan yararlanabilir:

  1. ConfigureAppConfigurationUygulamanın temsilcileri çalıştırıldıktan sonra yapılandırmayı yüklemek için kullanarak uygulamaya yapılandırma sağlayın ConfigureAppConfiguration . Barındırma başlangıç yapılandırması, uygulamanın yapılandırmasına bu yaklaşımı kullanarak öncelik kazanır.
  2. UseConfigurationUygulamanın temsilcileri yürütmeden önce yapılandırmayı yüklemek için kullanarak uygulamaya yapılandırma sağlayın ConfigureAppConfiguration . Uygulamanın yapılandırma değerleri, bu yaklaşımı kullanarak barındırma başlatma 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 belirtin

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

Özniteliği için yalnızca barındırma başlangıç derlemeleri taranır HostingStartup . Daha önce açıklanan barındırma başlangıç pencerelerini öğrenmek için Hostingstartupapp örnek uygulaması için, ortam değişkeni aşağıdaki değere ayarlanır:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Barındırma başlangıç bütünleştirilmiş kodları, 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>();
        });

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

Birden çok barındırma başlatması varsa, Configure yöntemleri derlemelerin listelendiği sırada yürütülür.

Etkinleştirme

Başlatma başlangıç etkinleştirme seçenekleri şunlardır:

  • Çalışma zamanı deposu: etkinleştirme etkinleştirme için derleme zamanı başvurusu gerektirmez. Örnek uygulama, çok makineli bir ortamda barındırma başlatmasının dağıtımını kolaylaştırmak için barındırma başlangıç derlemesini ve bağımlılıklar dosyalarını bir klasöre, dağıtımına koyar. Dağıtım klasörü Ayrıca, barındırma başlangıcını etkinleştirmek için dağıtım sistemindeki ortam değişkenlerini oluşturan veya değiştiren bir PowerShell betiği içerir.
  • Etkinleştirme için derleme zamanı başvurusu gerekiyor

Çalışma zamanı deposu

Barındırma başlangıç uygulamasının çalışma zamanı deposunayerleştirilmesi. Derleme zamanı başvurusu, Gelişmiş uygulama için gerekli değildir.

Barındırma başlatma oluşturulduktan sonra, bildirim proje 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 (Runtimesstore 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ı deposunu bulması için, çalışma zamanı deposunun konumu DOTNET_SHARED_STORE ortam değişkenine eklenir.

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

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

  • Dosya başlangıcında uygulamanın kendi .deps.js birlikte birleştirilecek dosyalara bir dizi ek .deps.js sağlayarak uygulamanın kitaplık grafiğini genişletin.
  • Barındırma başlangıç derlemesini bulunabilir ve yüklenebilir hale getirin.

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

  1. dotnet publishÖnceki bölümde başvurulan çalışma zamanı deposu bildirim dosyasında yürütün.
  2. Bildirimlerin bildirim başvurusunu ve runtime sonuçta elde edilen .deps.js dosyanın bölümünü kaldırın.

Örnek projede, store.manifest/1.0.0 özelliği targets ve libraries bölümünden 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.js dosyasını 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 konum eklendi DOTNET_ADDITIONAL_DEPS .
  • {SHARED FRAMEWORK NAME}: Bu ek bağımlılıklar 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ştirmesinin derleme adı.

Örnek uygulamada (Runtimesbir proje), 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ı depo konumunu bulması için, ek bağımlılıklar dosya konumu DOTNET_ADDITIONAL_DEPS ortam değişkenine eklenir.

Örnek uygulamada (Runtimesbir proje), çalışma zamanı deposunun oluşturulması ve ek bağımlılıklar dosyası oluşturulması bir PowerShell betiği kullanılarak gerçekleştirilir.

Çeşitli işletim sistemleri için ortam değişkenlerinin nasıl ayarlanbileceğine ilişkin örnekler için, bkz. birden çok ortam kullanma.

Dağıtım

Çoklu makine ortamında bir barındırma başlatması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ı.
  • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES DOTNET_SHARED_STORE DOTNET_ADDITIONAL_DEPS Barındırma başlangıcını etkinleştirmeyi desteklemek için, ve ' ı 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

bir barındırma başlangıç geliştirmesi, bir NuGet paketinde sağlanıyor. Pakette bir öznitelik vardır HostingStartup . Paket tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulama için kullanılabilir hale getirilir:

  • Gelişmiş uygulamanın proje dosyası, uygulamanın proje dosyasında (derleme zamanı başvurusu) barındırma başlatması için bir paket başvurusu yapar. Derleme zamanı başvurusuyla birlikte, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.js) eklenir. Bu yaklaşım, NuGet.org'e yayınlanan bir barındırma başlangıç derleme paketi için geçerlidir.
  • Barındırma başlatmasının bağımlılıklar dosyası, çalışma zamanı deposu bölümünde açıklandığı gibi gelişmiş uygulama için kullanılabilir hale getirilir (derleme zamanı başvurusu olmadan).

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

Project bin klasörü

Bir barındırma başlatma geliştirmesi, gelişmiş uygulamada, bin ile dağıtılan bir derleme tarafından sağlanıyor. Derleme tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulama için kullanılabilir hale getirilir:

  • Gelişmiş uygulamanın proje dosyası, barındırma başlatmaya bir derleme başvurusu yapar (derleme zamanı başvurusu). Derleme zamanı başvurusuyla birlikte, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.js) eklenir. Bu yaklaşım, dağıtım senaryosu barındırma başlatmasının derlemesi (.dll dosyası) için derleme zamanı başvurusu yapmak ve derlemeyi şu şekilde taşımak için çağırdığında geçerlidir:
    • Tüketen proje.
    • Tüketim Projesi tarafından erişilebilen bir konum.
  • Barındırma başlatmasının bağımlılıklar dosyası, çalışma zamanı deposu bölümünde açıklandığı gibi gelişmiş uygulama için kullanılabilir hale getirilir (derleme zamanı başvurusu olmadan).
  • .NET Framework hedeflenirken, derleme varsayılan yükleme bağlamında yüklenebilir olur; bu, .NET Framework, 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 bütünleştirilmiş kod önbelleği (gac): GAC, birkaç .NET Framework uygulamanın paylaştığı derlemeleri depolar. daha fazla bilgi için, bkz. nasıl yapılır: bir derlemeyi genel derleme önbelleğine yüklemek .NET Framework belgeleri.

Örnek kod

Örnek kod (nasıl indirileceği), başlangıç uygulama senaryolarını barındırma gösterir:

  • İki barındırma başlangıç derlemesi (sınıf kitaplıkları) her biri bellek içi yapılandırma anahtar-değer çiftleri çiftini ayarlar:
    • NuGet paketi (hostingstartuppackage)
    • Sınıf kitaplığı (Hostingstartuplibrary)
  • Bir barındırma başlatması, çalışma zamanı deposu tarafından dağıtılan bir derlemeden (Startupdiagnostics) etkinleştirilir. Derleme, üzerinde tanılama bilgileri sağlayan, başlangıçta uygulamaya iki middlewares ekler:
    • Kayıtlı hizmetler
    • Adres (düzen, ana bilgisayar, yol tabanı, yol, sorgu dizesi)
    • Bağlantı (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. ,, DotNet paketi komutuyla hostingstartuppackage paketini derleyin.

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

  3. Uygulamayı derleyin ve çalıştırın. Gelişmiş uygulamada bir paket başvurusu vardır (derleme zamanı başvurusu). <PropertyGroup>Uygulamanın proje dosyasındaki bir paket projenin çıkışını belirtir (.. /HostingStartupPackage/bin/Debug) bir paket kaynağı olarak. Bu, uygulamanın paketi NuGet.org'e yüklemeden paketi kullanmasına izin verir. Daha fazla bilgi için HostingStartupApp öğesinin 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 oluşturulan hizmet yapılandırma anahtarı değerlerinin, paketin yöntemi tarafından ayarlanan değerlerle eşleştiğini gözlemleyin ServiceKeyInjection.Configure .

hostingstartuppackage projesinde değişiklik yapıp yeniden derleyseniz, hostingstartupapp ' ın, 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 yereller komutunu yürütün:

dotnet nuget locals all --clear

Bir sınıf kitaplığından etkinleştirme

  1. , DotNet Build komutuyla hostingstartuplibrary sınıf kitaplığını derleyin.

  2. Sınıf kitaplığının Hostingstartuplibrary derleme adını ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ortam değişkenine ekleyin.

  3. bin- HostingStartupLibrary.dll dosyasını sınıf kitaplığının derlenmiş çıktısından 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. <ItemGroup>Uygulamanın proje dosyasındaki bir, 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 öğesinin 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 oluşturulan hizmet yapılandırma anahtarı değerlerinin, sınıf kitaplığının yöntemi tarafından ayarlanan değerlerle eşleştiğini gözlemleyin ServiceKeyInjection.Configure .

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

  1. Startupdiagnostics projesi dosyada StartupDiagnostics.deps.js değiştirmek için PowerShell kullanır. PowerShell, Windows 7 SP1 ve Windows Server 2008 R2 SP1 ile başlayan Windows varsayılan olarak yüklenir. Diğer platformlarda PowerShell 'i almak için bkz. PowerShell 'in çeşitli sürümlerini yükleme.
  2. Runtimesyürüme klasöründe build.ps1 betiğini yürütün. Betik şunları yapar:
    • , StartupDiagnostics Obj\packages klasöründe paketi oluşturur.
    • İçin çalışma zamanı deposunu StartupDiagnostics Mağaza klasöründe oluşturur. dotnet storeBetikteki komut, win7-x64 Windows dağıtılan bir barındırma başlatması için çalışma zamanı tanımlayıcısı 'nı (RID) kullanır. Farklı bir çalışma zamanı için barındırma başlangıcını sağlarken, betiğin 37. satırındaki doğru RID 'yi yerine koyun. Çalışma zamanı deposu StartupDiagnostics daha sonra derlemenin tüketilebileceği makinede kullanıcının veya sisteminin çalışma zamanı deposuna taşınır. Derlemenin Kullanıcı çalışma zamanı deposu yüklemesi konumu StartupDiagnostics . DotNet/Store/x64/netcoreapp 3.0/startupdiagnostics/1.0.0/lib/netcoreapp 3.0/StartupDiagnostics.dll.
    • , additionalDeps StartupDiagnostics Additionaldeps klasöründe için öğesini oluşturur. Ek bağımlılıklar daha sonra kullanıcının veya sistem ek bağımlılıklarına taşınır. Kullanıcı StartupDiagnostics ek bağımlılıkları yüklemesi konumu . DotNet/x64/additionalDeps/startupdiagnostics/Shared/Microsoft. netcore. app/3.0.0/StartupDiagnostics.deps.json.
    • deploy.ps1 dosyasını dağıtım klasörüne koyar.
  3. Dağıtım klasöründe deploy.ps1 betiğini çalıştırın. Betik şunu ekler:
    • StartupDiagnostics``ASPNETCORE_HOSTINGSTARTUPASSEMBLIESortam değişkenine.
    • Barındırma başlangıç bağımlılıkları yolu (Runtimessımında projenin dağıtım klasöründe) DOTNET_ADDITIONAL_DEPS ortam değişkenine.
    • Çalışma zamanı depolama yolu (Runtimes, projenin dağıtım klasöründe) DOTNET_SHARED_STORE ortam değişkenine.
  4. Örnek uygulamayı çalıştırın.
  5. /servicesUygulamanın kayıtlı hizmetlerini görmek için uç nokta isteyin. /diagTanılama bilgilerini görmek için uç nokta isteyin.

IHostingStartup(Barındırma başlatma) uygulaması, bir dış derlemeden başlatma sırasında bir 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 (nasıl indirileceği)

HostingStartup özniteliği

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

Giriş derlemesi veya sınıfı içeren derleme Startup öznitelik için otomatik olarak taranır HostingStartup . Öznitelikleri aramak için derlemelerin listesi HostingStartup Webhostdefaults. HostingStartupAssembliesKeyiçindeki yapılandırmadan çalışma zamanında yüklenir. Bulmadan dışlanacak derlemelerin listesi Webhostdefaults. Hostingstartupexcludederlemelieskeyöğesinden yüklendi. Daha fazla bilgi için bkz. Web Konağı: barındırma başlangıç derlemeleri ve Web Konağı: barındırma başlatma derlemeleri çıkarma.

Aşağıdaki örnekte, barındırma başlangıç derlemesinin ad alanı 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 bul

Yüklü barındırma başlangıç derlemelerini öğrenmek için, günlüğü 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ırak

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 engellemek için aşağıdakilerden birini veya olarak ayarlayın true 1 :
    • Barındırma başlangıç ana bilgisayar yapılandırma ayarını önleyin.
    • ASPNETCORE_PREVENTHOSTINGSTARTUP ortam değişkeni.
  • Belirli barındırma başlangıç derlemelerinin yüklenmesini engellemek için aşağıdakilerden birini, başlangıçta dışlamak üzere, bir barındırma başlangıç bütünleştirilmiş kodlarının noktalı virgülle ayrılmış dizesine ayarlayın:

Ana bilgisayar yapılandırma ayarı ve ortam değişkeni ayarlanırsa, konak ayarı davranışı denetler.

Konak ayarını veya ortam değişkenini kullanarak başlatma derlemelerinin barındırılmasını devre dışı bırakmak, derlemeyi küresel olarak devre dışı bırakabilir ve bir uygulamanın çeşitli özelliklerini devre dışı bırakabilir.

Project

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

Sınıf kitaplığı

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

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

  • Uygulayan bir barındırma başlangıç sınıfı içerir ServiceKeyInjection IHostingStartup . ServiceKeyInjection bellek içi yapılandırma sağlayıcısını (Addınmemorycollection) kullanarak uygulamanın yapılandırmasına bir hizmet dizesi çifti ekler.
  • HostingStartupBarındırma başlatmasının ad alanını ve sınıfını tanımlayan bir özniteliği içerir.

ServiceKeyInjectionSınıfın Configure yöntemi bir IWebHostBuilder uygulamaya geliştirmeler eklemek için bir 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ın 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 ayrı bir barındırma başlatma, hostingstartuppackage sağlayan bir NuGet paket projesi içerir. Paket, daha önce açıklanan sınıf kitaplığıyla aynı özelliklere sahiptir. Paket:

  • Uygulayan bir barındırma başlangıç sınıfı içerir ServiceKeyInjection IHostingStartup . ServiceKeyInjection uygulamanın yapılandırmasına bir hizmet dizesi çifti ekler.
  • Bir HostingStartup özniteliği 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ın 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 değil yalnızca .NET Core uygulamaları için kullanılabilir.

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

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

  • Barındırma başlangıç derlemesinde barındırma başlangıcını kullanmak için bir bağımlılıklar dosyası gereklidir. Bağımlılıklar dosyası, bir kitaplık değil bir uygulama yayımlamayla üretilen çalıştırılabilir bir uygulama varlıktır.
  • Bir kitaplık, paylaşılan çalışma zamanını hedefleyen bir çalıştırılabilir proje gerektiren çalışma zamanı paket deposunaeklenemez.

Dinamik barındırma başlatma oluşturma bölümünde:

  • Bir barındırma başlangıç derlemesi, konsol uygulamasından bir giriş noktası olmadan oluşturulur:
    • , Uygulamayı içeren bir sınıf içerir IHostingStartup .
    • Uygulama sınıfını tanımlamak için bir Hostingstartup özniteliği içerir IHostingStartup .
  • Konsol uygulaması, barındırma başlatması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ılları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 onun bağımlılıklar dosyası çalışma zamanı paket deposuna yerleştirilir. Barındırma başlangıç derlemesini ve onun bağımlılıklar dosyasını öğrenmek için, ortam değişkenleri çiftinde listelenir.

Konsol uygulaması Microsoft. AspNetCore. Hosting. soyutlamalar 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 yükleme ve yürütme için uygulamasının bir uygulamasını tanımlar IWebHost . Aşağıdaki örnekte, ad alanı StartupEnhancement ve sınıfı StartupEnhancementHostingStartup :

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

Bir sınıf uygular IHostingStartup . Sınıfın Configure yöntemi bir IWebHostBuilder uygulamaya geliştirmeler eklemek için bir kullanır. IHostingStartup.Configure barındırma başlangıç derlemesinde kullanıcı kodundan önce çalışma zamanı tarafından çağrılır Startup.Configure , bu da kullanıcı kodunun barındırma başlangıç derlemesi tarafından verilen yapılandırmanı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.
        }
    }
}

Bir proje oluştururken IHostingStartup , bağımlılıklar dosyası (.deps.js), runtime derlemenin konumunu bin klasörüne ayarlar:

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

Yalnızca dosyanın bir kısmı gösterilir. Örnekteki derleme adı StartupEnhancement .

Barındırma başlatma tarafından belirtilen yapılandırma

Yapılandırma işlemi, barındırma başlatmasının yapılandırmasının öncelikli olmasını mı yoksa uygulamanın yapılandırmasının öncelikli olmasını mı istediğinize bağlı olarak iki yaklaşımdan yararlanabilir:

  1. ConfigureAppConfigurationUygulamanın temsilcileri çalıştırıldıktan sonra yapılandırmayı yüklemek için kullanarak uygulamaya yapılandırma sağlayın ConfigureAppConfiguration . Barındırma başlangıç yapılandırması, uygulamanın yapılandırmasına bu yaklaşımı kullanarak öncelik kazanır.
  2. UseConfigurationUygulamanın temsilcileri yürütmeden önce yapılandırmayı yüklemek için kullanarak uygulamaya yapılandırma sağlayın ConfigureAppConfiguration . Uygulamanın yapılandırma değerleri, bu yaklaşımı kullanarak barındırma başlatma 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 belirtin

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

Özniteliği için yalnızca barındırma başlangıç derlemeleri taranır HostingStartup . Daha önce açıklanan barındırma başlangıç pencerelerini öğrenmek için Hostingstartupapp örnek uygulaması için, ortam değişkeni aşağıdaki değere ayarlanır:

HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics

Barındırma başlangıç bütünleştirilmiş kodları barındırma başlangıç derlemeleri ana bilgisayar yapılandırma ayarı kullanılarak da ayarlanabilir.

Birden çok barındırma başlatması varsa, Configure yöntemleri derlemelerin listelendiği sırada yürütülür.

Etkinleştirme

Başlatma başlangıç etkinleştirme seçenekleri şunlardır:

  • Çalışma zamanı deposu: etkinleştirme etkinleştirme için derleme zamanı başvurusu gerektirmez. Örnek uygulama, çok makineli bir ortamda barındırma başlatmasının dağıtımını kolaylaştırmak için barındırma başlangıç derlemesini ve bağımlılıklar dosyalarını bir klasöre, dağıtımına koyar. Dağıtım klasörü Ayrıca, barındırma başlangıcını etkinleştirmek için dağıtım sistemindeki ortam değişkenlerini oluşturan veya değiştiren bir PowerShell betiği içerir.
  • Etkinleştirme için derleme zamanı başvurusu gerekiyor

Çalışma zamanı deposu

Barındırma başlangıç uygulamasının çalışma zamanı deposunayerleştirilmesi. Derleme zamanı başvurusu, Gelişmiş uygulama için gerekli değildir.

Barındırma başlatma oluşturulduktan sonra, bildirim proje 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 (Runtimesstore 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ı deposunu bulması için, çalışma zamanı deposunun konumu DOTNET_SHARED_STORE ortam değişkenine eklenir.

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

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

  • Dosya başlangıcında uygulamanın kendi .deps.js birlikte birleştirilecek dosyalara bir dizi ek .deps.js sağlayarak uygulamanın kitaplık grafiğini genişletin.
  • Barındırma başlangıç derlemesini bulunabilir ve yüklenebilir hale getirin.

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

  1. dotnet publishÖnceki bölümde başvurulan çalışma zamanı deposu bildirim dosyasında yürütün.
  2. Bildirimlerin bildirim başvurusunu ve runtime sonuçta elde edilen .deps.js dosyanın bölümünü kaldırın.

Örnek projede, store.manifest/1.0.0 özelliği targets ve libraries bölümünden 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.js dosyasını 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 konum eklendi DOTNET_ADDITIONAL_DEPS .
  • {SHARED FRAMEWORK NAME}: Bu ek bağımlılıklar 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ştirmesinin derleme adı.

Örnek uygulamada (Runtimesbir proje), 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ı depo konumunu bulması için, ek bağımlılıklar dosya konumu DOTNET_ADDITIONAL_DEPS ortam değişkenine eklenir.

Örnek uygulamada (Runtimesbir proje), çalışma zamanı deposunun oluşturulması ve ek bağımlılıklar dosyası oluşturulması bir PowerShell betiği kullanılarak gerçekleştirilir.

Çeşitli işletim sistemleri için ortam değişkenlerinin nasıl ayarlanbileceğine ilişkin örnekler için, bkz. birden çok ortam kullanma.

Dağıtım

Çoklu makine ortamında bir barındırma başlatması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ı.
  • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES DOTNET_SHARED_STORE DOTNET_ADDITIONAL_DEPS Barındırma başlangıcını etkinleştirmeyi desteklemek için, ve ' ı 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

bir barındırma başlangıç geliştirmesi, bir NuGet paketinde sağlanıyor. Pakette bir öznitelik vardır HostingStartup . Paket tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulama için kullanılabilir hale getirilir:

  • Gelişmiş uygulamanın proje dosyası, uygulamanın proje dosyasında (derleme zamanı başvurusu) barındırma başlatması için bir paket başvurusu yapar. Derleme zamanı başvurusuyla birlikte, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.js) eklenir. Bu yaklaşım, NuGet.org'e yayınlanan bir barındırma başlangıç derleme paketi için geçerlidir.
  • Barındırma başlatmasının bağımlılıklar dosyası, çalışma zamanı deposu bölümünde açıklandığı gibi gelişmiş uygulama için kullanılabilir hale getirilir (derleme zamanı başvurusu olmadan).

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

Project bin klasörü

Bir barındırma başlatma geliştirmesi, gelişmiş uygulamada, bin ile dağıtılan bir derleme tarafından sağlanıyor. Derleme tarafından sağlanan barındırma başlangıç türleri, aşağıdaki yaklaşımlardan biri kullanılarak uygulama için kullanılabilir hale getirilir:

  • Gelişmiş uygulamanın proje dosyası, barındırma başlatmaya bir derleme başvurusu yapar (derleme zamanı başvurusu). Derleme zamanı başvurusuyla birlikte, barındırma başlangıç derlemesi ve tüm bağımlılıkları uygulamanın bağımlılık dosyasına (.deps.js) eklenir. Bu yaklaşım, dağıtım senaryosu barındırma başlatmasının derlemesi (.dll dosyası) için derleme zamanı başvurusu yapmak ve derlemeyi şu şekilde taşımak için çağırdığında geçerlidir:
    • Tüketen proje.
    • Tüketim Projesi tarafından erişilebilen bir konum.
  • Barındırma başlatmasının bağımlılıklar dosyası, çalışma zamanı deposu bölümünde açıklandığı gibi gelişmiş uygulama için kullanılabilir hale getirilir (derleme zamanı başvurusu olmadan).
  • .NET Framework hedeflenirken, derleme varsayılan yükleme bağlamında yüklenebilir olur; bu, .NET Framework, 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 bütünleştirilmiş kod önbelleği (gac): GAC, birkaç .NET Framework uygulamanın paylaştığı derlemeleri depolar. daha fazla bilgi için, bkz. nasıl yapılır: bir derlemeyi genel derleme önbelleğine yüklemek .NET Framework belgeleri.

Örnek kod

Örnek kod (nasıl indirileceği), başlangıç uygulama senaryolarını barındırma gösterir:

  • İki barındırma başlangıç derlemesi (sınıf kitaplıkları) her biri bellek içi yapılandırma anahtar-değer çiftleri çiftini ayarlar:
    • NuGet paketi (hostingstartuppackage)
    • Sınıf kitaplığı (Hostingstartuplibrary)
  • Bir barındırma başlatması, çalışma zamanı deposu tarafından dağıtılan bir derlemeden (Startupdiagnostics) etkinleştirilir. Derleme, üzerinde tanılama bilgileri sağlayan, başlangıçta uygulamaya iki middlewares ekler:
    • Kayıtlı hizmetler
    • Adres (düzen, ana bilgisayar, yol tabanı, yol, sorgu dizesi)
    • Bağlantı (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. ,, DotNet paketi komutuyla hostingstartuppackage paketini derleyin.

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

  3. Uygulamayı derleyin ve çalıştırın. Gelişmiş uygulamada bir paket başvurusu vardır (derleme zamanı başvurusu). <PropertyGroup>Uygulamanın proje dosyasındaki bir paket projenin çıkışını belirtir (.. /HostingStartupPackage/bin/Debug) bir paket kaynağı olarak. Bu, uygulamanın paketi NuGet.org'e yüklemeden paketi kullanmasına izin verir. Daha fazla bilgi için HostingStartupApp öğesinin 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 oluşturulan hizmet yapılandırma anahtarı değerlerinin, paketin yöntemi tarafından ayarlanan değerlerle eşleştiğini gözlemleyin ServiceKeyInjection.Configure .

hostingstartuppackage projesinde değişiklik yapıp yeniden derleyseniz, hostingstartupapp ' ın, 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 yereller komutunu yürütün:

dotnet nuget locals all --clear

Bir sınıf kitaplığından etkinleştirme

  1. , DotNet Build komutuyla hostingstartuplibrary sınıf kitaplığını derleyin.

  2. Sınıf kitaplığının Hostingstartuplibrary derleme adını ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ortam değişkenine ekleyin.

  3. bin- HostingStartupLibrary.dll dosyasını sınıf kitaplığının derlenmiş çıktısından 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. <ItemGroup>Uygulamanın proje dosyasındaki bir, 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 öğesinin 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 oluşturulan hizmet yapılandırma anahtarı değerlerinin, sınıf kitaplığının yöntemi tarafından ayarlanan değerlerle eşleştiğini gözlemleyin ServiceKeyInjection.Configure .

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

  1. Startupdiagnostics projesi dosyada StartupDiagnostics.deps.js değiştirmek için PowerShell kullanır. PowerShell, Windows 7 SP1 ve Windows Server 2008 R2 SP1 ile başlayan Windows varsayılan olarak yüklenir. Diğer platformlarda PowerShell elde etmek için bkz. PowerShell'in çeşitli sürümlerini yükleme.
  2. Çalışma build.ps1 RuntimeStore klasöründe yürütün. Betik şunları yapar:
    • StartupDiagnostics obj\packages klasöründe paketi oluşturur.
    • için çalışma zamanı depolarını StartupDiagnostics store klasöründe oluşturur. dotnet storeBetikte yer alan komut, çalışma zamanı win7-x64 tanımlayıcısını (RID) Windows. Farklı bir çalışma zamanı için barındırma başlangıcı sağlarken, betiğin 37. satırına doğru RID'i kullanın. için çalışma zamanı deposu daha sonra derlemenin tüketildiği makinede kullanıcının veya sistemin çalışma StartupDiagnostics zamanı deposuna taşınır. Derleme için kullanıcı çalışma zamanı deposu yükleme konumu StartupDiagnostics .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll.
    • additionalDeps StartupDiagnostics additionalDeps klasöründe için oluşturur. Ek bağımlılıklar daha sonra kullanıcının veya sistemin ek bağımlılıklara taşınır. Kullanıcının StartupDiagnostics ek bağımlılık yükleme konumu : .dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json.
    • deploy.ps1 dosyasını dağıtım klasörüne yer.
  3. Dağıtım klasöründedeploy.ps1 betiği çalıştırın. Betik şunları ekler:
    • StartupDiagnostics ortam ASPNETCORE_HOSTINGSTARTUPASSEMBLIES değişkenine.
    • Barındırma başlangıç bağımlılıkları yolu (RuntimeStore projesinin dağıtım klasöründe) ortam DOTNET_ADDITIONAL_DEPS değişkenine.
    • Çalışma zamanı depolama yolu (RuntimeStore projesinin dağıtım klasöründe) ortam DOTNET_SHARED_STORE değişkenine.
  4. Örnek uygulamayı çalıştırın.
  5. Uygulamanın /services kayıtlı hizmetlerini görmek için uç noktayı talep edin. Tanılama bilgilerini /diag görmek için uç noktayı talep edin.