Menggunakan rakitan startup hosting di ASP.NET Core
Catatan
Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Peringatan
Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Penting
Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Untuk rilis saat ini, lihat versi .NET 8 dari artikel ini.
Oleh Pavel Krymets
IHostingStartup Implementasi (startup hosting) menambahkan penyempurnaan ke aplikasi saat startup dari rakitan eksternal. Misalnya, pustaka eksternal dapat menggunakan implementasi startup hosting untuk menyediakan penyedia konfigurasi atau layanan tambahan ke aplikasi.
Melihat atau mengunduh kode sampel (cara mengunduh)
Atribut HostingStartup
Atribut HostingStartup menunjukkan adanya perakitan startup hosting untuk diaktifkan saat runtime.
Rakitan entri atau rakitan yang berisi Startup
kelas secara otomatis dipindai untuk HostingStartup
atribut . Daftar rakitan untuk HostingStartup
mencari atribut dimuat saat runtime dari konfigurasi di WebHostDefaults.HostingStartupAssembliesKey. Daftar rakitan yang akan dikecualikan dari penemuan dimuat dari WebHostDefaults.HostingStartupExcludeAssembliesKey.
Dalam contoh berikut, namespace perakitan startup hosting adalah StartupEnhancement
. Kelas yang berisi kode startup hosting adalah StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Atribut HostingStartup
ini biasanya terletak di file kelas implementasi perakitan IHostingStartup
startup hosting.
Menemukan rakitan startup hosting yang dimuat
Untuk menemukan rakitan startup hosting yang dimuat, aktifkan pengelogan dan periksa log aplikasi. Kesalahan yang terjadi saat memuat rakitan dicatat. Rakitan startup hosting yang dimuat dicatat di tingkat Debug, dan semua kesalahan dicatat.
Menonaktifkan pemuatan otomatis rakitan startup hosting
Untuk menonaktifkan pemuatan otomatis rakitan startup hosting, gunakan salah satu pendekatan berikut:
Untuk mencegah semua rakitan startup hosting dimuat, atur salah satu hal berikut ke
true
atau1
:Cegah pengaturan konfigurasi host Hosting Startup:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.PreventHostingStartupKey, "true") .UseStartup<Startup>(); });
ASPNETCORE_PREVENTHOSTINGSTARTUP
variabel lingkungan.
Untuk mencegah rakitan startup hosting tertentu dimuat, atur salah satu hal berikut ke string rakitan startup hosting yang dibatasi titik koma untuk dikecualikan saat startup:
Pengaturan konfigurasi host Hosting Startup Exclude Assemblies:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting( WebHostDefaults.HostingStartupExcludeAssembliesKey, "{ASSEMBLY1;ASSEMBLY2; ...}") .UseStartup<Startup>(); });
Tempat
{ASSEMBLY1;ASSEMBLY2; ...}
penampung mewakili daftar rakitan yang dipisahkan titik koma.ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
variabel lingkungan.
Jika pengaturan konfigurasi host dan variabel lingkungan diatur, pengaturan host mengontrol perilaku.
Menonaktifkan rakitan startup hosting menggunakan pengaturan host atau variabel lingkungan menonaktifkan perakitan secara global dan dapat menonaktifkan beberapa karakteristik aplikasi.
Project
Buat startup hosting dengan salah satu jenis proyek berikut:
Pustaka kelas
Penyempurnaan startup hosting dapat disediakan di pustaka kelas. Pustaka berisi HostingStartup
atribut.
Kode sampel mencakup Razor aplikasi Pages, HostingStartupApp, dan pustaka kelas, HostingStartupLibrary. Pustaka kelas:
- Berisi kelas startup hosting,
ServiceKeyInjection
, yang mengimplementasikanIHostingStartup
.ServiceKeyInjection
menambahkan sepasang string layanan ke konfigurasi aplikasi menggunakan penyedia konfigurasi dalam memori (AddInMemoryCollection). HostingStartup
Menyertakan atribut yang mengidentifikasi namespace layanan dan kelas startup hosting.
Metode ServiceKeyInjection
kelas Configure menggunakan IWebHostBuilder untuk menambahkan penyempurnaan ke aplikasi.
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);
});
}
}
}
Halaman Indeks aplikasi membaca dan merender nilai konfigurasi untuk dua kunci yang ditetapkan oleh rakitan startup hosting pustaka kelas:
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()
{
}
}
Kode sampel juga mencakup proyek paket NuGet yang menyediakan startup hosting terpisah, HostingStartupPackage. Paket ini memiliki karakteristik yang sama dari pustaka kelas yang dijelaskan sebelumnya. Paket:
- Berisi kelas startup hosting,
ServiceKeyInjection
, yang mengimplementasikanIHostingStartup
.ServiceKeyInjection
menambahkan sepasang string layanan ke konfigurasi aplikasi. HostingStartup
Menyertakan atribut.
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);
});
}
}
}
Halaman Indeks aplikasi membaca dan merender nilai konfigurasi untuk dua kunci yang ditetapkan oleh rakitan startup hosting paket:
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()
{
}
}
Aplikasi konsol tanpa titik masuk
Pendekatan ini hanya tersedia untuk aplikasi .NET Core, bukan .NET Framework.
Peningkatan startup hosting dinamis yang tidak memerlukan referensi waktu kompilasi untuk aktivasi dapat disediakan di aplikasi konsol tanpa titik masuk yang berisi HostingStartup
atribut. Menerbitkan aplikasi konsol menghasilkan rakitan startup hosting yang dapat dikonsumsi dari penyimpanan runtime.
Aplikasi konsol tanpa titik masuk digunakan dalam proses ini karena:
- File dependensi diperlukan untuk menggunakan startup hosting di perakitan startup hosting. File dependensi adalah aset aplikasi yang dapat dijalankan yang diproduksi dengan menerbitkan aplikasi, bukan pustaka.
- Pustaka tidak dapat ditambahkan langsung ke penyimpanan paket runtime, yang memerlukan proyek yang dapat dijalankan yang menargetkan runtime bersama.
Dalam pembuatan startup hosting dinamis:
- Rakitan startup hosting dibuat dari aplikasi konsol tanpa titik masuk yang:
- Termasuk kelas yang berisi
IHostingStartup
implementasi. - Termasuk atribut HostingStartup untuk mengidentifikasi
IHostingStartup
kelas implementasi.
- Termasuk kelas yang berisi
- Aplikasi konsol diterbitkan untuk mendapatkan dependensi startup hosting. Konsekuensi dari penerbitan aplikasi konsol adalah bahwa dependensi yang tidak digunakan dipangkas dari file dependensi.
- File dependensi dimodifikasi untuk mengatur lokasi runtime perakitan startup hosting.
- Perakitan startup hosting dan file dependensinya ditempatkan ke dalam penyimpanan paket runtime. Untuk menemukan perakitan startup hosting dan file dependensinya, mereka tercantum dalam sepasang variabel lingkungan.
Aplikasi konsol mereferensikan paket Microsoft.AspNetCore.Hosting.Abstractions :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="3.0.0" />
</ItemGroup>
</Project>
Atribut HostingStartup mengidentifikasi kelas sebagai implementasi IHostingStartup
untuk pemuatan dan eksekusi saat membangun IWebHost. Dalam contoh berikut, namespace adalah StartupEnhancement
, dan kelasnya adalah StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Kelas mengimplementasikan IHostingStartup
. Metode kelas Configure menggunakan IWebHostBuilder untuk menambahkan penyempurnaan ke aplikasi. IHostingStartup.Configure
di rakitan startup hosting dipanggil oleh runtime sebelumnya Startup.Configure
dalam kode pengguna, yang memungkinkan kode pengguna untuk menimpa konfigurasi apa pun yang disediakan oleh perakitan startup hosting.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Saat membangun IHostingStartup
proyek, file dependensi (.deps.json
) mengatur runtime
lokasi perakitan ke folder bin :
"targets": {
".NETCoreApp,Version=v3.0": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "3.0.0"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
Hanya bagian dari file yang ditampilkan. Nama rakitan dalam contoh adalah StartupEnhancement
.
Konfigurasi yang disediakan oleh startup hosting
Ada dua pendekatan untuk menangani konfigurasi tergantung pada apakah Anda ingin konfigurasi startup hosting diutamakan atau konfigurasi aplikasi diutamakan:
- Berikan konfigurasi ke aplikasi menggunakan ConfigureAppConfiguration untuk memuat konfigurasi setelah delegasi aplikasi ConfigureAppConfiguration dijalankan. Konfigurasi startup hosting lebih diprioritaskan daripada konfigurasi aplikasi menggunakan pendekatan ini.
- Berikan konfigurasi ke aplikasi menggunakan UseConfiguration untuk memuat konfigurasi sebelum delegasi aplikasi ConfigureAppConfiguration dijalankan. Nilai konfigurasi aplikasi lebih diprioritaskan daripada yang disediakan oleh startup hosting menggunakan pendekatan ini.
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);
}
}
Tentukan perakitan startup hosting
Untuk startup hosting yang disediakan aplikasi pustaka kelas atau konsol, tentukan nama perakitan startup hosting dalam ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan. Variabel lingkungan adalah daftar rakitan yang dibatasi titik koma.
Hanya rakitan startup hosting yang dipindai untuk atribut .HostingStartup
Untuk aplikasi sampel, HostingStartupApp, untuk menemukan startup hosting yang dijelaskan sebelumnya, variabel lingkungan diatur ke nilai berikut:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
Rakitan startup hosting juga dapat diatur menggunakan pengaturan konfigurasi host Hosting Startup Assemblies:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(
WebHostDefaults.HostingStartupAssembliesKey,
"{ASSEMBLY1;ASSEMBLY2; ...}")
.UseStartup<Startup>();
});
Tempat {ASSEMBLY1;ASSEMBLY2; ...}
penampung mewakili daftar rakitan yang dipisahkan titik koma.
Ketika beberapa rakitan startup hosting ada, metode mereka Configure dijalankan dalam urutan rakitan dicantumkan.
Aktivasi
Opsi untuk menghosting aktivasi startup adalah:
- Penyimpanan runtime: Aktivasi tidak memerlukan referensi waktu kompilasi untuk aktivasi. Aplikasi sampel menempatkan rakitan startup hosting dan file dependensi ke dalam folder, penyebaran, untuk memfasilitasi penyebaran startup hosting di lingkungan multimachine. Folder penyebaran juga menyertakan skrip PowerShell yang membuat atau memodifikasi variabel lingkungan pada sistem penyebaran untuk mengaktifkan startup hosting.
- Referensi waktu kompilasi diperlukan untuk aktivasi
Penyimpanan runtime
Implementasi startup hosting ditempatkan di penyimpanan runtime. Referensi waktu kompilasi ke rakitan tidak diperlukan oleh aplikasi yang ditingkatkan.
Setelah startup hosting dibangun, penyimpanan runtime dibuat menggunakan file proyek manifes dan perintah penyimpanan dotnet.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
Di aplikasi sampel (proyek RuntimeStore ) perintah berikut digunakan:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Agar runtime untuk menemukan penyimpanan runtime, lokasi penyimpanan runtime ditambahkan ke DOTNET_SHARED_STORE
variabel lingkungan.
Memodifikasi dan menempatkan file dependensi startup hosting
Untuk mengaktifkan peningkatan tanpa referensi paket ke peningkatan, tentukan dependensi tambahan ke runtime dengan additionalDeps
. additionalDeps
memungkinkan Anda untuk:
- Perluas grafik pustaka aplikasi dengan menyediakan sekumpulan file tambahan
.deps.json
untuk digabungkan dengan file aplikasi sendiri.deps.json
saat startup. - Buat perakitan startup hosting dapat ditemukan dan dapat dimuat.
Pendekatan yang direkomendasikan untuk menghasilkan file dependensi tambahan adalah dengan:
- Jalankan
dotnet publish
pada file manifes penyimpanan runtime yang dirujuk di bagian sebelumnya. - Hapus referensi manifes dari pustaka dan bagian
runtime
file yang dihasilkan.deps.json
.
Dalam proyek contoh, store.manifest/1.0.0
properti dihapus dari bagian targets
dan libraries
:
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v3.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v3.0": {
"store.manifest/1.0.0": {
"dependencies": {
"StartupDiagnostics": "1.0.0"
},
"runtime": {
"store.manifest.dll": {}
}
},
"StartupDiagnostics/1.0.0": {
"runtime": {
"lib/netcoreapp3.0/StartupDiagnostics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"store.manifest/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StartupDiagnostics/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xrhzuNSyM5/f4ZswhooJ9dmIYLP64wMnqUJSyTKVDKDVj5T+qtzypl8JmM/aFJLLpYrf0FYpVWvGujd7/FfMEw==",
"path": "startupdiagnostics/1.0.0",
"hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
}
}
}
Tempatkan .deps.json
file ke lokasi berikut:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
{ADDITIONAL DEPENDENCIES PATH}
: Lokasi ditambahkan keDOTNET_ADDITIONAL_DEPS
variabel lingkungan.{SHARED FRAMEWORK NAME}
: Kerangka kerja bersama diperlukan untuk file dependensi tambahan ini.{SHARED FRAMEWORK VERSION}
: Versi kerangka kerja bersama minimum.{ENHANCEMENT ASSEMBLY NAME}
: Nama rakitan penyempurnaan.
Di aplikasi sampel (proyek RuntimeStore ), file dependensi tambahan ditempatkan ke lokasi berikut:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/3.0.0/StartupDiagnostics.deps.json
Agar runtime menemukan lokasi penyimpanan runtime, lokasi file dependensi tambahan ditambahkan ke DOTNET_ADDITIONAL_DEPS
variabel lingkungan.
Dalam aplikasi sampel (proyek RuntimeStore ), membangun penyimpanan runtime dan menghasilkan file dependensi tambahan dicapai menggunakan skrip PowerShell .
Untuk contoh cara mengatur variabel lingkungan untuk berbagai sistem operasi, lihat Menggunakan beberapa lingkungan.
Penyebaran
Untuk memfasilitasi penyebaran startup hosting di lingkungan multimachine, aplikasi sampel membuat folder penyebaran dalam output yang diterbitkan yang berisi:
- Penyimpanan runtime startup hosting.
- File dependensi startup hosting.
- Skrip PowerShell yang membuat atau memodifikasi
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
,DOTNET_SHARED_STORE
, danDOTNET_ADDITIONAL_DEPS
untuk mendukung aktivasi startup hosting. Jalankan skrip dari prompt perintah PowerShell administratif pada sistem penyebaran.
Paket NuGet
Penyempurnaan startup hosting dapat disediakan dalam paket NuGet. Paket memiliki HostingStartup
atribut . Jenis startup hosting yang disediakan oleh paket tersedia untuk aplikasi menggunakan salah satu pendekatan berikut:
- File proyek aplikasi yang disempurnakan membuat referensi paket untuk startup hosting dalam file proyek aplikasi (referensi waktu kompilasi). Dengan referensi waktu kompilasi di tempat, perakitan startup hosting dan semua dependensinya dimasukkan ke dalam file dependensi aplikasi (
.deps.json
). Pendekatan ini berlaku untuk paket perakitan startup hosting yang diterbitkan ke nuget.org. - File dependensi startup hosting tersedia untuk aplikasi yang ditingkatkan seperti yang dijelaskan di bagian Penyimpanan runtime (tanpa referensi waktu kompilasi).
Untuk informasi selengkapnya tentang paket NuGet dan penyimpanan runtime bahasa umum, lihat topik berikut:
Folder bin proyek
Penyempurnaan startup hosting dapat disediakan oleh rakitan bin-deployed di aplikasi yang ditingkatkan. Jenis startup hosting yang disediakan oleh assembly tersedia untuk aplikasi menggunakan salah satu pendekatan berikut:
- File proyek aplikasi yang disempurnakan membuat referensi perakitan ke startup hosting (referensi waktu kompilasi). Dengan referensi waktu kompilasi di tempat, perakitan startup hosting dan semua dependensinya dimasukkan ke dalam file dependensi aplikasi (
.deps.json
). Pendekatan ini berlaku ketika skenario penyebaran memanggil untuk membuat referensi waktu kompilasi ke assembly startup hosting (file .dll ) dan memindahkan assembly ke:- Proyek yang mengkonsumsi.
- Lokasi yang dapat diakses oleh proyek yang mengkonsumsi.
- File dependensi startup hosting tersedia untuk aplikasi yang ditingkatkan seperti yang dijelaskan di bagian Penyimpanan runtime (tanpa referensi waktu kompilasi).
- Saat menargetkan .NET Framework, assembly dapat dimuat dalam konteks beban default, yang pada .NET Framework berarti bahwa assembly terletak di salah satu lokasi berikut:
- Jalur dasar aplikasi: Folder bin tempat aplikasi dapat dieksekusi (.exe) berada.
- Global Assembly Cache (GAC): GAC menyimpan rakitan yang dibagikan beberapa aplikasi .NET Framework. Untuk informasi selengkapnya, lihat Cara: Menginstal rakitan ke dalam cache perakitan global dalam dokumentasi .NET Framework.
Kode Sampel
Kode sampel (cara mengunduh) menunjukkan skenario implementasi startup hosting:
- Dua rakitan startup hosting (pustaka kelas) menetapkan sepasang pasangan kunci-nilai konfigurasi dalam memori masing-masing:
- Paket NuGet (HostingStartupPackage)
- Pustaka kelas (HostingStartupLibrary)
- Startup hosting diaktifkan dari rakitan yang disebarkan penyimpanan runtime (StartupDiagnostics). Rakitan menambahkan dua middleware ke aplikasi saat startup yang memberikan informasi diagnostik tentang:
- Layanan terdaftar
- Alamat (skema, host, dasar jalur, jalur, string kueri)
- Koneksi (IP jarak jauh, port jarak jauh, IP lokal, port lokal, sertifikat klien)
- Header permintaan
- Variabel lingkungan
Untuk menjalankan sampel:
Aktivasi dari paket NuGet
Kompilasi paket HostingStartupPackage dengan perintah paket dotnet.
Tambahkan nama rakitan paket dari HostingStartupPackage ke
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.Kompilasi dan jalankan aplikasi. Referensi paket ada di aplikasi yang ditingkatkan (referensi waktu kompilasi).
<PropertyGroup>
Dalam file proyek aplikasi menentukan output proyek paket (.. . /HostingStartupPackage/bin/Debug) sebagai sumber paket. Ini memungkinkan aplikasi untuk menggunakan paket tanpa mengunggah paket ke nuget.org. Untuk informasi selengkapnya, lihat catatan dalam file proyek HostingStartupApp.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
Amati bahwa nilai kunci konfigurasi layanan yang dirender oleh halaman Indeks cocok dengan nilai yang ditetapkan oleh metode paket
ServiceKeyInjection.Configure
.
Jika Anda membuat perubahan pada proyek HostingStartupPackage dan mengkombinasi ulang, hapus cache paket NuGet lokal untuk memastikan bahwa HostingStartupApp menerima paket yang diperbarui dan bukan paket kedaluarsa dari cache lokal. Untuk menghapus cache NuGet lokal, jalankan perintah lokal nuget dotnet berikut:
dotnet nuget locals all --clear
Aktivasi dari pustaka kelas
Kompilasi pustaka kelas HostingStartupLibrary dengan perintah build dotnet.
Tambahkan nama rakitan pustaka kelas HostingStartupLibrary ke
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.bin-deploy rakitan pustaka kelas ke aplikasi dengan menyalin file HostingStartupLibrary.dll dari output yang dikompilasi pustaka kelas ke folder bin/Debug aplikasi.
Kompilasi dan jalankan aplikasi. Dalam
<ItemGroup>
file proyek aplikasi mereferensikan rakitan pustaka kelas (.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll) (referensi waktu kompilasi). Untuk informasi selengkapnya, lihat catatan dalam file proyek HostingStartupApp.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp3.0\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp3.0\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
Amati bahwa nilai kunci konfigurasi layanan yang dirender oleh halaman Indeks cocok dengan nilai yang ditetapkan oleh metode pustaka
ServiceKeyInjection.Configure
kelas.
Aktivasi dari rakitan yang disebarkan penyimpanan runtime
- Proyek StartupDiagnostics menggunakan PowerShell untuk mengubah filenya
StartupDiagnostics.deps.json
. PowerShell diinstal secara default pada Windows yang dimulai dengan Windows 7 SP1 dan Windows Server 2008 R2 SP1. Untuk mendapatkan PowerShell di platform lain, lihat Menginstal berbagai versi PowerShell. - Jalankan skrip build.ps1 di folder RuntimeStore . Skrip:
StartupDiagnostics
Menghasilkan paket di folder obj\packages.- Menghasilkan penyimpanan runtime untuk
StartupDiagnostics
di folder penyimpanan .dotnet store
Perintah dalam skrip menggunakanwin7-x64
pengidentifikasi runtime (RID) untuk startup hosting yang disebarkan ke Windows. Saat menyediakan startup hosting untuk runtime yang berbeda, ganti RID yang benar pada baris 37 skrip. Penyimpanan runtime untukStartupDiagnostics
nantinya akan dipindahkan ke penyimpanan runtime pengguna atau sistem pada komputer tempat perakitan akan dikonsumsi. Lokasi penginstalan penyimpanan runtime pengguna untuk perakitanStartupDiagnostics
adalah .dotnet/store/x64/netcoreapp3.0/startupdiagnostics/1.0.0/lib/netcoreapp3.0/StartupDiagnostics.dll. additionalDeps
Menghasilkan untukStartupDiagnostics
di folder additionalDeps. Dependensi tambahan nantinya akan dipindahkan ke dependensi tambahan pengguna atau sistem. Lokasi penginstalan dependensi tambahan penggunaStartupDiagnostics
adalah.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/3.0.0/StartupDiagnostics.deps.json
.- Tempatkan file deploy.ps1 di folder penyebaran .
- Jalankan skrip deploy.ps1 di folder penyebaran . Skrip menambahkan:
StartupDiagnostics
keASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.- Jalur dependensi startup hosting (di folder penyebaran proyek RuntimeStore) ke
DOTNET_ADDITIONAL_DEPS
variabel lingkungan. - Jalur penyimpanan runtime (di folder penyebaran proyek RuntimeStore) ke
DOTNET_SHARED_STORE
variabel lingkungan.
- Jalankan aplikasi sampel.
/services
Minta titik akhir untuk melihat layanan terdaftar aplikasi./diag
Minta titik akhir untuk melihat informasi diagnostik.
IHostingStartup Implementasi (startup hosting) menambahkan penyempurnaan ke aplikasi saat startup dari rakitan eksternal. Misalnya, pustaka eksternal dapat menggunakan implementasi startup hosting untuk menyediakan penyedia konfigurasi atau layanan tambahan ke aplikasi.
Melihat atau mengunduh kode sampel (cara mengunduh)
Atribut HostingStartup
Atribut HostingStartup menunjukkan adanya perakitan startup hosting untuk diaktifkan saat runtime.
Rakitan entri atau rakitan yang berisi Startup
kelas secara otomatis dipindai untuk HostingStartup
atribut . Daftar rakitan untuk HostingStartup
mencari atribut dimuat saat runtime dari konfigurasi di WebHostDefaults.HostingStartupAssembliesKey. Daftar rakitan yang akan dikecualikan dari penemuan dimuat dari WebHostDefaults.HostingStartupExcludeAssembliesKey. Untuk informasi selengkapnya, lihat Web Host: Hosting Startup Assemblies dan Web Host: Hosting Startup Exclude Assemblies.
Dalam contoh berikut, namespace perakitan startup hosting adalah StartupEnhancement
. Kelas yang berisi kode startup hosting adalah StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Atribut HostingStartup
ini biasanya terletak di file kelas implementasi perakitan IHostingStartup
startup hosting.
Menemukan rakitan startup hosting yang dimuat
Untuk menemukan rakitan startup hosting yang dimuat, aktifkan pengelogan dan periksa log aplikasi. Kesalahan yang terjadi saat memuat rakitan dicatat. Rakitan startup hosting yang dimuat dicatat di tingkat Debug, dan semua kesalahan dicatat.
Menonaktifkan pemuatan otomatis rakitan startup hosting
Untuk menonaktifkan pemuatan otomatis rakitan startup hosting, gunakan salah satu pendekatan berikut:
- Untuk mencegah semua rakitan startup hosting dimuat, atur salah satu hal berikut ke
true
atau1
:- Cegah pengaturan konfigurasi host Hosting Startup .
ASPNETCORE_PREVENTHOSTINGSTARTUP
variabel lingkungan.
- Untuk mencegah rakitan startup hosting tertentu dimuat, atur salah satu hal berikut ke string rakitan startup hosting yang dibatasi titik koma untuk dikecualikan saat startup:
- Hosting Startup Mengecualikan pengaturan konfigurasi host Assemblies .
ASPNETCORE_HOSTINGSTARTUPEXCLUDEASSEMBLIES
variabel lingkungan.
Jika pengaturan konfigurasi host dan variabel lingkungan diatur, pengaturan host mengontrol perilaku.
Menonaktifkan rakitan startup hosting menggunakan pengaturan host atau variabel lingkungan menonaktifkan perakitan secara global dan dapat menonaktifkan beberapa karakteristik aplikasi.
Project
Buat startup hosting dengan salah satu jenis proyek berikut:
Pustaka kelas
Penyempurnaan startup hosting dapat disediakan di pustaka kelas. Pustaka berisi HostingStartup
atribut.
Kode sampel mencakup Razor aplikasi Pages, HostingStartupApp, dan pustaka kelas, HostingStartupLibrary. Pustaka kelas:
- Berisi kelas startup hosting,
ServiceKeyInjection
, yang mengimplementasikanIHostingStartup
.ServiceKeyInjection
menambahkan sepasang string layanan ke konfigurasi aplikasi menggunakan penyedia konfigurasi dalam memori (AddInMemoryCollection). HostingStartup
Menyertakan atribut yang mengidentifikasi namespace layanan dan kelas startup hosting.
Metode ServiceKeyInjection
kelas Configure menggunakan IWebHostBuilder untuk menambahkan penyempurnaan ke aplikasi.
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);
});
}
}
}
Halaman Indeks aplikasi membaca dan merender nilai konfigurasi untuk dua kunci yang ditetapkan oleh rakitan startup hosting pustaka kelas:
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()
{
}
}
Kode sampel juga mencakup proyek paket NuGet yang menyediakan startup hosting terpisah, HostingStartupPackage. Paket ini memiliki karakteristik yang sama dari pustaka kelas yang dijelaskan sebelumnya. Paket:
- Berisi kelas startup hosting,
ServiceKeyInjection
, yang mengimplementasikanIHostingStartup
.ServiceKeyInjection
menambahkan sepasang string layanan ke konfigurasi aplikasi. HostingStartup
Menyertakan atribut.
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);
});
}
}
}
Halaman Indeks aplikasi membaca dan merender nilai konfigurasi untuk dua kunci yang ditetapkan oleh rakitan startup hosting paket:
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()
{
}
}
Aplikasi konsol tanpa titik masuk
Pendekatan ini hanya tersedia untuk aplikasi .NET Core, bukan .NET Framework.
Peningkatan startup hosting dinamis yang tidak memerlukan referensi waktu kompilasi untuk aktivasi dapat disediakan di aplikasi konsol tanpa titik masuk yang berisi HostingStartup
atribut. Menerbitkan aplikasi konsol menghasilkan rakitan startup hosting yang dapat dikonsumsi dari penyimpanan runtime.
Aplikasi konsol tanpa titik masuk digunakan dalam proses ini karena:
- File dependensi diperlukan untuk menggunakan startup hosting di perakitan startup hosting. File dependensi adalah aset aplikasi yang dapat dijalankan yang diproduksi dengan menerbitkan aplikasi, bukan pustaka.
- Pustaka tidak dapat ditambahkan langsung ke penyimpanan paket runtime, yang memerlukan proyek yang dapat dijalankan yang menargetkan runtime bersama.
Dalam pembuatan startup hosting dinamis:
- Rakitan startup hosting dibuat dari aplikasi konsol tanpa titik masuk yang:
- Termasuk kelas yang berisi
IHostingStartup
implementasi. - Termasuk atribut HostingStartup untuk mengidentifikasi
IHostingStartup
kelas implementasi.
- Termasuk kelas yang berisi
- Aplikasi konsol diterbitkan untuk mendapatkan dependensi startup hosting. Konsekuensi dari penerbitan aplikasi konsol adalah bahwa dependensi yang tidak digunakan dipangkas dari file dependensi.
- File dependensi dimodifikasi untuk mengatur lokasi runtime perakitan startup hosting.
- Perakitan startup hosting dan file dependensinya ditempatkan ke dalam penyimpanan paket runtime. Untuk menemukan perakitan startup hosting dan file dependensinya, mereka tercantum dalam sepasang variabel lingkungan.
Aplikasi konsol mereferensikan paket Microsoft.AspNetCore.Hosting.Abstractions :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions"
Version="2.1.1" />
</ItemGroup>
</Project>
Atribut HostingStartup mengidentifikasi kelas sebagai implementasi IHostingStartup
untuk pemuatan dan eksekusi saat membangun IWebHost. Dalam contoh berikut, namespace adalah StartupEnhancement
, dan kelasnya adalah StartupEnhancementHostingStartup
:
[assembly: HostingStartup(typeof(StartupEnhancement.StartupEnhancementHostingStartup))]
Kelas mengimplementasikan IHostingStartup
. Metode kelas Configure menggunakan IWebHostBuilder untuk menambahkan penyempurnaan ke aplikasi. IHostingStartup.Configure
di rakitan startup hosting dipanggil oleh runtime sebelumnya Startup.Configure
dalam kode pengguna, yang memungkinkan kode pengguna untuk menimpa konfigurasi apa pun yang disediakan oleh perakitan startup hosting.
namespace StartupEnhancement
{
public class StartupEnhancementHostingStartup : IHostingStartup
{
public void Configure(IWebHostBuilder builder)
{
// Use the IWebHostBuilder to add app enhancements.
}
}
}
Saat membangun IHostingStartup
proyek, file dependensi (.deps.json
) mengatur runtime
lokasi perakitan ke folder bin :
"targets": {
".NETCoreApp,Version=v2.1": {
"StartupEnhancement/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Hosting.Abstractions": "2.1.1"
},
"runtime": {
"StartupEnhancement.dll": {}
}
}
}
}
Hanya bagian dari file yang ditampilkan. Nama rakitan dalam contoh adalah StartupEnhancement
.
Konfigurasi yang disediakan oleh startup hosting
Ada dua pendekatan untuk menangani konfigurasi tergantung pada apakah Anda ingin konfigurasi startup hosting diutamakan atau konfigurasi aplikasi diutamakan:
- Berikan konfigurasi ke aplikasi menggunakan ConfigureAppConfiguration untuk memuat konfigurasi setelah delegasi aplikasi ConfigureAppConfiguration dijalankan. Konfigurasi startup hosting lebih diprioritaskan daripada konfigurasi aplikasi menggunakan pendekatan ini.
- Berikan konfigurasi ke aplikasi menggunakan UseConfiguration untuk memuat konfigurasi sebelum delegasi aplikasi ConfigureAppConfiguration dijalankan. Nilai konfigurasi aplikasi lebih diprioritaskan daripada yang disediakan oleh startup hosting menggunakan pendekatan ini.
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);
}
}
Tentukan perakitan startup hosting
Untuk startup hosting yang disediakan aplikasi pustaka kelas atau konsol, tentukan nama perakitan startup hosting dalam ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan. Variabel lingkungan adalah daftar rakitan yang dibatasi titik koma.
Hanya rakitan startup hosting yang dipindai untuk atribut .HostingStartup
Untuk aplikasi sampel, HostingStartupApp, untuk menemukan startup hosting yang dijelaskan sebelumnya, variabel lingkungan diatur ke nilai berikut:
HostingStartupLibrary;HostingStartupPackage;StartupDiagnostics
Rakitan startup hosting juga dapat diatur menggunakan pengaturan konfigurasi host Hosting Startup Assemblies .
Ketika beberapa rakitan startup hosting ada, metode mereka Configure dijalankan dalam urutan rakitan dicantumkan.
Aktivasi
Opsi untuk menghosting aktivasi startup adalah:
- Penyimpanan runtime: Aktivasi tidak memerlukan referensi waktu kompilasi untuk aktivasi. Aplikasi sampel menempatkan rakitan startup hosting dan file dependensi ke dalam folder, penyebaran, untuk memfasilitasi penyebaran startup hosting di lingkungan multimachine. Folder penyebaran juga menyertakan skrip PowerShell yang membuat atau memodifikasi variabel lingkungan pada sistem penyebaran untuk mengaktifkan startup hosting.
- Referensi waktu kompilasi diperlukan untuk aktivasi
Penyimpanan runtime
Implementasi startup hosting ditempatkan di penyimpanan runtime. Referensi waktu kompilasi ke rakitan tidak diperlukan oleh aplikasi yang ditingkatkan.
Setelah startup hosting dibangun, penyimpanan runtime dibuat menggunakan file proyek manifes dan perintah penyimpanan dotnet.
dotnet store --manifest {MANIFEST FILE} --runtime {RUNTIME IDENTIFIER} --output {OUTPUT LOCATION} --skip-optimization
Di aplikasi sampel (proyek RuntimeStore ) perintah berikut digunakan:
dotnet store --manifest store.manifest.csproj --runtime win7-x64 --output ./deployment/store --skip-optimization
Agar runtime untuk menemukan penyimpanan runtime, lokasi penyimpanan runtime ditambahkan ke DOTNET_SHARED_STORE
variabel lingkungan.
Memodifikasi dan menempatkan file dependensi startup hosting
Untuk mengaktifkan peningkatan tanpa referensi paket ke peningkatan, tentukan dependensi tambahan ke runtime dengan additionalDeps
. additionalDeps
memungkinkan Anda untuk:
- Perluas grafik pustaka aplikasi dengan menyediakan sekumpulan file tambahan
.deps.json
untuk digabungkan dengan file aplikasi sendiri.deps.json
saat startup. - Buat perakitan startup hosting dapat ditemukan dan dapat dimuat.
Pendekatan yang direkomendasikan untuk menghasilkan file dependensi tambahan adalah dengan:
- Jalankan
dotnet publish
pada file manifes penyimpanan runtime yang dirujuk di bagian sebelumnya. - Hapus referensi manifes dari pustaka dan bagian
runtime
file yang dihasilkan.deps.json
.
Dalam proyek contoh, store.manifest/1.0.0
properti dihapus dari bagian targets
dan libraries
:
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v2.1",
"signature": "4ea77c7b75ad1895ae1ea65e6ba2399010514f99"
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v2.1": {
"store.manifest/1.0.0": {
"dependencies": {
"StartupDiagnostics": "1.0.0"
},
"runtime": {
"store.manifest.dll": {}
}
},
"StartupDiagnostics/1.0.0": {
"runtime": {
"lib/netcoreapp2.1/StartupDiagnostics.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"store.manifest/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"StartupDiagnostics/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-oiQr60vBQW7+nBTmgKLSldj06WNLRTdhOZpAdEbCuapoZ+M2DJH2uQbRLvFT8EGAAv4TAKzNtcztpx5YOgBXQQ==",
"path": "startupdiagnostics/1.0.0",
"hashPath": "startupdiagnostics.1.0.0.nupkg.sha512"
}
}
}
Tempatkan .deps.json
file ke lokasi berikut:
{ADDITIONAL DEPENDENCIES PATH}/shared/{SHARED FRAMEWORK NAME}/{SHARED FRAMEWORK VERSION}/{ENHANCEMENT ASSEMBLY NAME}.deps.json
{ADDITIONAL DEPENDENCIES PATH}
: Lokasi ditambahkan keDOTNET_ADDITIONAL_DEPS
variabel lingkungan.{SHARED FRAMEWORK NAME}
: Kerangka kerja bersama diperlukan untuk file dependensi tambahan ini.{SHARED FRAMEWORK VERSION}
: Versi kerangka kerja bersama minimum.{ENHANCEMENT ASSEMBLY NAME}
: Nama rakitan penyempurnaan.
Di aplikasi sampel (proyek RuntimeStore ), file dependensi tambahan ditempatkan ke lokasi berikut:
deployment/additionalDeps/shared/Microsoft.AspNetCore.App/2.1.0/StartupDiagnostics.deps.json
Agar runtime menemukan lokasi penyimpanan runtime, lokasi file dependensi tambahan ditambahkan ke DOTNET_ADDITIONAL_DEPS
variabel lingkungan.
Dalam aplikasi sampel (proyek RuntimeStore ), membangun penyimpanan runtime dan menghasilkan file dependensi tambahan dicapai menggunakan skrip PowerShell .
Untuk contoh cara mengatur variabel lingkungan untuk berbagai sistem operasi, lihat Menggunakan beberapa lingkungan.
Penyebaran
Untuk memfasilitasi penyebaran startup hosting di lingkungan multimachine, aplikasi sampel membuat folder penyebaran dalam output yang diterbitkan yang berisi:
- Penyimpanan runtime startup hosting.
- File dependensi startup hosting.
- Skrip PowerShell yang membuat atau memodifikasi
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
,DOTNET_SHARED_STORE
, danDOTNET_ADDITIONAL_DEPS
untuk mendukung aktivasi startup hosting. Jalankan skrip dari prompt perintah PowerShell administratif pada sistem penyebaran.
Paket NuGet
Penyempurnaan startup hosting dapat disediakan dalam paket NuGet. Paket memiliki HostingStartup
atribut . Jenis startup hosting yang disediakan oleh paket tersedia untuk aplikasi menggunakan salah satu pendekatan berikut:
- File proyek aplikasi yang disempurnakan membuat referensi paket untuk startup hosting dalam file proyek aplikasi (referensi waktu kompilasi). Dengan referensi waktu kompilasi di tempat, perakitan startup hosting dan semua dependensinya dimasukkan ke dalam file dependensi aplikasi (
.deps.json
). Pendekatan ini berlaku untuk paket perakitan startup hosting yang diterbitkan ke nuget.org. - File dependensi startup hosting tersedia untuk aplikasi yang ditingkatkan seperti yang dijelaskan di bagian Penyimpanan runtime (tanpa referensi waktu kompilasi).
Untuk informasi selengkapnya tentang paket NuGet dan penyimpanan runtime bahasa umum, lihat topik berikut:
Folder bin proyek
Penyempurnaan startup hosting dapat disediakan oleh rakitan bin-deployed di aplikasi yang ditingkatkan. Jenis startup hosting yang disediakan oleh assembly tersedia untuk aplikasi menggunakan salah satu pendekatan berikut:
- File proyek aplikasi yang disempurnakan membuat referensi perakitan ke startup hosting (referensi waktu kompilasi). Dengan referensi waktu kompilasi di tempat, perakitan startup hosting dan semua dependensinya dimasukkan ke dalam file dependensi aplikasi (
.deps.json
). Pendekatan ini berlaku ketika skenario penyebaran memanggil untuk membuat referensi waktu kompilasi ke assembly startup hosting (file .dll ) dan memindahkan assembly ke:- Proyek yang mengkonsumsi.
- Lokasi yang dapat diakses oleh proyek yang mengkonsumsi.
- File dependensi startup hosting tersedia untuk aplikasi yang ditingkatkan seperti yang dijelaskan di bagian Penyimpanan runtime (tanpa referensi waktu kompilasi).
- Saat menargetkan .NET Framework, assembly dapat dimuat dalam konteks beban default, yang pada .NET Framework berarti bahwa assembly terletak di salah satu lokasi berikut:
- Jalur dasar aplikasi: Folder bin tempat aplikasi dapat dieksekusi (.exe) berada.
- Global Assembly Cache (GAC): GAC menyimpan rakitan yang dibagikan beberapa aplikasi .NET Framework. Untuk informasi selengkapnya, lihat Cara: Menginstal rakitan ke dalam cache perakitan global dalam dokumentasi .NET Framework.
Kode Sampel
Kode sampel (cara mengunduh) menunjukkan skenario implementasi startup hosting:
- Dua rakitan startup hosting (pustaka kelas) menetapkan sepasang pasangan kunci-nilai konfigurasi dalam memori masing-masing:
- Paket NuGet (HostingStartupPackage)
- Pustaka kelas (HostingStartupLibrary)
- Startup hosting diaktifkan dari rakitan yang disebarkan penyimpanan runtime (StartupDiagnostics). Rakitan menambahkan dua middleware ke aplikasi saat startup yang memberikan informasi diagnostik tentang:
- Layanan terdaftar
- Alamat (skema, host, dasar jalur, jalur, string kueri)
- Koneksi (IP jarak jauh, port jarak jauh, IP lokal, port lokal, sertifikat klien)
- Header permintaan
- Variabel lingkungan
Untuk menjalankan sampel:
Aktivasi dari paket NuGet
Kompilasi paket HostingStartupPackage dengan perintah paket dotnet.
Tambahkan nama rakitan paket dari HostingStartupPackage ke
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.Kompilasi dan jalankan aplikasi. Referensi paket ada di aplikasi yang ditingkatkan (referensi waktu kompilasi).
<PropertyGroup>
Dalam file proyek aplikasi menentukan output proyek paket (.. . /HostingStartupPackage/bin/Debug) sebagai sumber paket. Ini memungkinkan aplikasi untuk menggunakan paket tanpa mengunggah paket ke nuget.org. Untuk informasi selengkapnya, lihat catatan dalam file proyek HostingStartupApp.<PropertyGroup> <RestoreSources>$(RestoreSources);https://api.nuget.org/v3/index.json;../HostingStartupPackage/bin/Debug</RestoreSources> </PropertyGroup>
Amati bahwa nilai kunci konfigurasi layanan yang dirender oleh halaman Indeks cocok dengan nilai yang ditetapkan oleh metode paket
ServiceKeyInjection.Configure
.
Jika Anda membuat perubahan pada proyek HostingStartupPackage dan mengkombinasi ulang, hapus cache paket NuGet lokal untuk memastikan bahwa HostingStartupApp menerima paket yang diperbarui dan bukan paket kedaluarsa dari cache lokal. Untuk menghapus cache NuGet lokal, jalankan perintah lokal nuget dotnet berikut:
dotnet nuget locals all --clear
Aktivasi dari pustaka kelas
Kompilasi pustaka kelas HostingStartupLibrary dengan perintah build dotnet.
Tambahkan nama rakitan pustaka kelas HostingStartupLibrary ke
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.bin-deploy rakitan pustaka kelas ke aplikasi dengan menyalin file HostingStartupLibrary.dll dari output yang dikompilasi pustaka kelas ke folder bin/Debug aplikasi.
Kompilasi dan jalankan aplikasi. Dalam
<ItemGroup>
file proyek aplikasi mereferensikan rakitan pustaka kelas (.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll) (referensi waktu kompilasi). Untuk informasi selengkapnya, lihat catatan dalam file proyek HostingStartupApp.<ItemGroup> <Reference Include=".\\bin\\Debug\\netcoreapp2.1\\HostingStartupLibrary.dll"> <HintPath>.\bin\Debug\netcoreapp2.1\HostingStartupLibrary.dll</HintPath> <SpecificVersion>False</SpecificVersion> </Reference> </ItemGroup>
Amati bahwa nilai kunci konfigurasi layanan yang dirender oleh halaman Indeks cocok dengan nilai yang ditetapkan oleh metode pustaka
ServiceKeyInjection.Configure
kelas.
Aktivasi dari rakitan yang disebarkan penyimpanan runtime
- Proyek StartupDiagnostics menggunakan PowerShell untuk mengubah filenya
StartupDiagnostics.deps.json
. PowerShell diinstal secara default pada Windows yang dimulai dengan Windows 7 SP1 dan Windows Server 2008 R2 SP1. Untuk mendapatkan PowerShell di platform lain, lihat Menginstal berbagai versi PowerShell. - Jalankan skrip build.ps1 di folder RuntimeStore . Skrip:
StartupDiagnostics
Menghasilkan paket di folder obj\packages.- Menghasilkan penyimpanan runtime untuk
StartupDiagnostics
di folder penyimpanan .dotnet store
Perintah dalam skrip menggunakanwin7-x64
pengidentifikasi runtime (RID) untuk startup hosting yang disebarkan ke Windows. Saat menyediakan startup hosting untuk runtime yang berbeda, ganti RID yang benar pada baris 37 skrip. Penyimpanan runtime untukStartupDiagnostics
nantinya akan dipindahkan ke penyimpanan runtime pengguna atau sistem pada komputer tempat perakitan akan dikonsumsi. Lokasi penginstalan penyimpanan runtime pengguna untuk perakitanStartupDiagnostics
adalah .dotnet/store/x64/netcoreapp2.2/startupdiagnostics/1.0.0/lib/netcoreapp2.2/StartupDiagnostics.dll. additionalDeps
Menghasilkan untukStartupDiagnostics
di folder additionalDeps. Dependensi tambahan nantinya akan dipindahkan ke dependensi tambahan pengguna atau sistem. Lokasi penginstalan dependensi tambahan penggunaStartupDiagnostics
adalah.dotnet/x64/additionalDeps/StartupDiagnostics/shared/Microsoft.NETCore.App/2.2.0/StartupDiagnostics.deps.json
.- Tempatkan file deploy.ps1 di folder penyebaran .
- Jalankan skrip deploy.ps1 di folder penyebaran . Skrip menambahkan:
StartupDiagnostics
keASPNETCORE_HOSTINGSTARTUPASSEMBLIES
variabel lingkungan.- Jalur dependensi startup hosting (di folder penyebaran proyek RuntimeStore) ke
DOTNET_ADDITIONAL_DEPS
variabel lingkungan. - Jalur penyimpanan runtime (di folder penyebaran proyek RuntimeStore) ke
DOTNET_SHARED_STORE
variabel lingkungan.
- Jalankan aplikasi sampel.
/services
Minta titik akhir untuk melihat layanan terdaftar aplikasi./diag
Minta titik akhir untuk melihat informasi diagnostik.
ASP.NET Core