ASP.NET Core'da barındırma başlangıç derlemelerini kullanma
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
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
1
olaraktrue
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.
Proje
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
IHostingStartup
bir barındırma başlangıç sınıfıServiceKeyInjection
iç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 ServiceKeyInjection
Configure 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
IHostingStartup
bir barındırma başlangıç sınıfıServiceKeyInjection
iç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.
- Uygulamayı içeren
- 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ı , StartupEnhancement
sı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:
- 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.
- 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:
- Önceki bölümde başvuruda bulunılan çalışma zamanı deposu bildirim dosyasında yürütebilirsiniz
dotnet publish
. - Kitaplıklardan bildirim başvuruyu ve sonuçta
.deps.json
elde edilenruntime
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şkenineDOTNET_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_HOSTINGSTARTUPASSEMBLIES
desteklemek için ,DOTNET_SHARED_STORE
veDOTNET_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:
- Gelişmiş uygulamanın proje dosyası, uygulamanın proje dosyasında barındırma başlangıcı için bir paket 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, nuget.org yayımlanan bir barındırma başlatma derleme paketi için geçerlidir. - 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.
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ğ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
HostingStartupPackage paketini dotnet pack komutuyla derleyin.
Paketin HostingStartupPackage derleme adını ortam değişkenine
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
ekleyin.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>
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
HostingStartupLibrary sınıf kitaplığını dotnet build komutuyla derleyin.
Ortam değişkenine sınıf kitaplığının HostingStartupLibrary
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
derleme adını ekleyin.sınıf kitaplığının derlenmiş çıkışındaki HostingStartupLibrary.dll dosyasını uygulamanın bin/Debug klasörüne kopyalayarak sınıf kitaplığının derlemesini uygulamaya dağıtın.
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>
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
- 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. - 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. Betiktekidotnet 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çinStartupDiagnostics
ç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çinStartupDiagnostics
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
additionalDeps
StartupDiagnostics
additionalDeps 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.
- deploy.ps1 betiğini dağıtım klasöründe çalıştırın. Betik ekler:
StartupDiagnostics
ortam değişkenine geçinASPNETCORE_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
.
- Örnek uygulamayı çalıştırın.
/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
1
olaraktrue
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:
- Barındırma Başlangıç Dışlama Derlemeleri ana bilgisayar yapılandırma ayarı.
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.
Proje
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
IHostingStartup
bir barındırma başlangıç sınıfıServiceKeyInjection
iç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 ServiceKeyInjection
Configure 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
IHostingStartup
bir barındırma başlangıç sınıfıServiceKeyInjection
iç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.
- Uygulamayı içeren
- 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ı , StartupEnhancement
sı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:
- 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.
- 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:
- Önceki bölümde başvuruda bulunılan çalışma zamanı deposu bildirim dosyasında yürütebilirsiniz
dotnet publish
. - Kitaplıklardan bildirim başvuruyu ve sonuçta
.deps.json
elde edilenruntime
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şkenineDOTNET_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_HOSTINGSTARTUPASSEMBLIES
desteklemek için ,DOTNET_SHARED_STORE
veDOTNET_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:
- Gelişmiş uygulamanın proje dosyası, uygulamanın proje dosyasında barındırma başlangıcı için bir paket 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, nuget.org yayımlanan bir barındırma başlatma derleme paketi için geçerlidir. - 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.
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ğ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
HostingStartupPackage paketini dotnet pack komutuyla derleyin.
Paketin HostingStartupPackage derleme adını ortam değişkenine
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
ekleyin.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>
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
HostingStartupLibrary sınıf kitaplığını dotnet build komutuyla derleyin.
Ortam değişkenine sınıf kitaplığının HostingStartupLibrary
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
derleme adını ekleyin.sınıf kitaplığının derlenmiş çıkışındaki HostingStartupLibrary.dll dosyasını uygulamanın bin/Debug klasörüne kopyalayarak sınıf kitaplığının derlemesini uygulamaya dağıtın.
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>
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
- 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. - 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. Betiktekidotnet 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çinStartupDiagnostics
ç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çinStartupDiagnostics
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
additionalDeps
StartupDiagnostics
additionalDeps 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.
- deploy.ps1 betiğini dağıtım klasöründe çalıştırın. Betik ekler:
StartupDiagnostics
ortam değişkenine geçinASPNETCORE_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
.
- Örnek uygulamayı çalıştırın.
/services
Uygulamanın kayıtlı hizmetlerini görmek için uç noktayı isteyin./diag
Tanılama bilgilerini görmek için uç noktayı isteyin.
ASP.NET Core