Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara memperbarui ASP.NET Core yang ada di proyek .NET 5 ke .NET 6. Untuk instruksi tentang cara bermigrasi dari ASP.NET Core 3.1 ke .NET 6, lihat Migrasi dari ASP.NET Core 3.1 ke .NET 6.
Prasyarat
- Visual Studio 2022 dengan beban kerja ASP.NET serta pengembangan web.
- .NET 6 SDK
Memperbarui versi .NET SDK di global.json
Jika Anda mengandalkan global.json
file untuk menargetkan versi .NET SDK tertentu, perbarui version
properti ke versi .NET 6 SDK yang diinstal. Contohnya:
{
"sdk": {
- "version": "5.0.100"
+ "version": "6.0.100"
}
}
Perbarui kerangka target
Perbarui Moniker Kerangka Kerja Target (TFM) pada file proyek menjadi net6.0
:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net5.0</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
Memperbarui referensi paket
Dalam file proyek, update atribut Microsoft.AspNetCore.*
dari referensi paket Microsoft.Extensions.*
dan Version
ke versi 6.0.0 atau yang lebih baru. Contohnya:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="5.0.3" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="5.0.0" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
</ItemGroup>
Model hosting baru
Model hosting minimal .NET 6 baru untuk aplikasi ASP.NET Core hanya memerlukan satu file dan beberapa baris kode. Aplikasi yang bermigrasi ke .NET 6 tidak perlu menggunakan model hosting minimal baru. Untuk informasi selengkapnya, lihat Aplikasi yang bermigrasi ke .NET 6 tidak perlu menggunakan model hosting minimal baru di bagian berikut.
Kode berikut dari templat kosong ASP.NET Core membuat aplikasi menggunakan model hosting minimal baru:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Model hosting yang minimal:
- Secara signifikan mengurangi jumlah file dan baris kode yang diperlukan untuk membuat aplikasi. Hanya satu file yang diperlukan dengan empat baris kode.
- Menyatukan
Startup.cs
danProgram.cs
ke dalam satuProgram.cs
file. - Menggunakan pernyataan tingkat atas untuk meminimalkan kode yang diperlukan untuk aplikasi.
- Menggunakan arahan global
using
untuk menghilangkan atau meminimalkan jumlahusing
baris pernyataan yang diperlukan.
Kode berikut menampilkan file Startup.cs
dan Program.cs
dari template Aplikasi Web .NET 5 (Razor Halaman) dengan pernyataan using
yang tidak digunakan dihapus.
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
// Unused usings removed.
namespace WebAppRPv5
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
}
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
// Unused usings removed.
namespace WebAppRPv5
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
Dalam ASP.NET Core di .NET 6, kode sebelumnya digantikan dengan yang berikut:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Contoh ASP.NET Core sebelumnya dalam .NET 6 menunjukkan cara:
-
ConfigureServices diganti dengan
WebApplication.Services
. -
builder.Build()
mengembalikan yang dikonfigurasi WebApplication ke variabelapp
. Configure diganti dengan panggilan konfigurasi ke layanan yang sama menggunakanapp
.
Contoh terperinci migrasi ASP.NET Core dalam kode .NET 5 Startup
ke .NET 6 menggunakan model hosting minimal disediakan nanti dalam dokumen ini.
Ada beberapa perubahan pada file lain yang dihasilkan untuk templat Aplikasi Web:
-
Index.cshtml
danPrivacy.cshtml
memiliki pernyataanusing
yang tidak digunakan dihapus. -
RequestId
dinyatakanError.cshtml
sebagai jenis referensi nullable (NRT):
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
- Tingkat log standar telah berubah di
appsettings.json
danappsettings.Development.json
:
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
+ "Microsoft.AspNetCore": "Warning"
Dalam kode templat ASP.NET Core sebelumnya, "Microsoft": "Warning"
telah diubah menjadi "Microsoft.AspNetCore": "Warning"
. Perubahan ini menghasilkan pencatatan semua pesan informasi dari Microsoft
namespace kecualiMicrosoft.AspNetCore
. Misalnya, Microsoft.EntityFrameworkCore
sekarang dicatat di tingkat informasi.
Untuk detail selengkapnya tentang model hosting baru, lihat bagian Tanya jawab umum . Untuk informasi selengkapnya tentang adopsi jenis referensi nullable (NRTs) dan analisis statis null-state kompilator .NET, lihat bagian Jenis referensi nullable (NRTs) dan analisis statis null-state kompilator .NET.
Aplikasi yang bermigrasi ke atau menggunakan 6.0 atau yang lebih baru tidak perlu menggunakan model hosting minimal baru
Menggunakan Startup
dan Host Generik yang digunakan oleh templat ASP.NET Core 3.1 dan 5.0 didukung sepenuhnya.
Gunakan Startup dengan model hosting minimal baru
aplikasi ASP.NET Core 3.1 dan 5.0 dapat menggunakan kode mereka Startup
dengan model hosting minimal baru. Menggunakan Startup
dengan model hosting minimal memiliki keuntungan berikut:
- Tidak ada pantulan tersembunyi yang digunakan untuk memanggil
Startup
kelas. - Kode asinkron dapat ditulis karena pengembang mengontrol panggilan ke
Startup
. - Kode dapat ditulis yang menggabungkan
ConfigureServices
danConfigure
.
Salah satu batasan kecil dalam menggunakan Startup
kode dengan model hosting minimal baru adalah bahwa untuk menyuntikkan dependensi ke dalam Configure
, layanan di Program.cs
harus diselesaikan secara manual.
Pertimbangkan kode berikut yang dihasilkan oleh templat Halaman ASP.NET Core 3.1 atau 5.0 Razor :
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Kode sebelumnya dimigrasikan ke model hosting minimal baru:
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app, app.Environment);
app.Run();
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Dalam kode sebelumnya, if (env.IsDevelopment())
blok dihapus karena dalam mode pengembangan, middleware pengembang untuk halaman pengecualian sudah diaktifkan secara default. Untuk informasi selengkapnya, lihat Perbedaan antara model hosting ASP.NET Core di .NET 5 dan .NET 6 di bagian berikutnya.
Saat menggunakan kontainer injeksi dependensi kustom (DI), tambahkan kode yang disorot berikut:
using Autofac;
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
// Using a custom DI container.
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(startup.ConfigureContainer);
var app = builder.Build();
startup.Configure(app, app.Environment);
app.Run();
using Autofac;
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
// Using a custom DI container
public void ConfigureContainer(ContainerBuilder builder)
{
// Configure custom container.
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Saat menggunakan model hosting minimal, middleware perutean titik akhir membungkus seluruh alur middleware, oleh karena itu tidak perlu memiliki panggilan eksplisit ke UseRouting
atau UseEndpoints
untuk mendaftarkan rute.
UseRouting
masih dapat digunakan untuk menentukan di mana pencocokan rute terjadi, tetapi UseRouting
tidak perlu dipanggil secara eksplisit jika rute harus dicocokkan di awal alur middleware.
Dalam kode berikut, panggilan ke UseRouting
dan UseEndpoints
dihapus dari Startup
.
MapRazorPages
dipanggil dalam Program.cs
:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
//app.UseRouting();
//app.UseEndpoints(endpoints =>
//{
// endpoints.MapRazorPages();
//});
}
}
using Microsoft.AspNetCore.Builder;
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app, app.Environment);
app.MapRazorPages();
app.Run();
Saat menggunakan Startup
dengan model hosting minimal baru, ingatlah perbedaan berikut:
-
Program.cs
mengontrol instansiasi dan siklus hidup dari kelasStartup
. - Setiap layanan tambahan yang disuntikkan ke dalam metode
Configure
perlu diselesaikan secara manual oleh kelasProgram
.
Perbedaan antara model hosting ASP.NET Core dalam .NET 5 dan .NET 6
- Dalam mode pengembangan, middleware untuk halaman pengecualian pengembang diaktifkan secara default.
- Nama aplikasi secara default adalah nama rakitan titik masuk:
Assembly.GetEntryAssembly().GetName().FullName
. Saat menggunakan WebApplicationBuilder di pustaka, ubahlah nama aplikasi secara eksplisit ke sekumpulan kumpulan perpustakaan agar penemuan bagian aplikasi MVC dapat berfungsi. Lihat Mengubah akar konten, nama aplikasi, dan lingkungan dalam dokumen ini untuk instruksi terperinci. - Middleware perutean titik akhir membungkus seluruh alur middleware, oleh karena itu tidak perlu memiliki panggilan eksplisit ke
UseRouting
atauUseEndpoints
untuk mendaftarkan rute.UseRouting
masih dapat digunakan untuk menentukan di mana pencocokan rute terjadi, tetapiUseRouting
tidak perlu dipanggil secara eksplisit jika rute harus dicocokkan di awal alur middleware. -
Pipeline dibuat sebelum eksekusi apapunIStartupFilter, oleh karena itu pengecualian yang disebabkan saat membangun pipeline tidak terlihat oleh
IStartupFilter
rantai panggilan. - Beberapa alat, seperti migrasi EF, menggunakan
Program.CreateHostBuilder
untuk mengakses aplikasiIServiceProvider
guna menjalankan logika kustom dalam konteks aplikasi. Alat-alat ini telah diperbarui untuk menggunakan teknik baru untuk menjalankan logika kustom dalam konteks aplikasi. Migrasi Kerangka Kerja Entitas adalah contoh alat yang menggunakanProgram.CreateHostBuilder
dengan cara ini. Kami berupaya memastikan alat diperbarui untuk menggunakan model baru. - Tidak seperti kelas
Startup
, host minimal tidak secara otomatis mengonfigurasi ruang lingkup DI saat menginstansiasi penyedia layanan. Untuk konteks di mana cakupan diperlukan, perlu dipanggil IServiceScope dengan IServiceScopeFactory.CreateScope untuk membuat instans cakupan baru. Untuk informasi selengkapnya, lihat cara mengatasi layanan saat pengaktifan aplikasi. - Tidak dimungkinkan untuk mengubah pengaturan host apa pun seperti nama aplikasi, lingkungan, atau akar konten setelah pembuatan . Untuk instruksi terperinci tentang mengubah pengaturan host, lihat Menyesuaikan
IHostBuilder
atauIWebHostBuilder
. API yang disorot berikut melemparkan pengecualian:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
// WebHost
try
{
builder.WebHost.UseContentRoot(Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
builder.WebHost.UseEnvironment(Environments.Staging);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
builder.WebHost.UseSetting(WebHostDefaults.ApplicationKey, "ApplicationName2");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
builder.WebHost.UseSetting(WebHostDefaults.ContentRootKey, Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
builder.WebHost.UseSetting(WebHostDefaults.EnvironmentKey, Environments.Staging);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
// Host
try
{
builder.Host.UseEnvironment(Environments.Staging);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
try
{
// TODO: This does not throw
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Kelas
Startup
tidak dapat digunakan dariWebApplicationBuilder.Host
atauWebApplicationBuilder.WebHost
. Kode yang disorot berikut melemparkan pengecualian:var builder = WebApplication.CreateBuilder(args); try { builder.Host.ConfigureWebHostDefaults(webHostBuilder => { webHostBuilder.UseStartup<Startup>(); }); } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } builder.Services.AddRazorPages(); var app = builder.Build();
var builder = WebApplication.CreateBuilder(args); try { builder.WebHost.UseStartup<Startup>(); } catch (Exception ex) { Console.WriteLine(ex.Message); throw; } builder.Services.AddRazorPages(); var app = builder.Build();
Implementasi IHostBuilder pada WebApplicationBuilder (
WebApplicationBuilder.Host
), tidak menunda eksekusi ConfigureServicesmetode , ConfigureAppConfiguration, atau ConfigureHostConfiguration . Tidak menunda eksekusi memungkinkan kode menggunakan WebApplicationBuilder untuk mengamati perubahan yang dilakukan padaIServiceCollection
danIConfiguration
. Contoh berikut hanya menambahkanService1
sebagaiIService
:using Microsoft.Extensions.DependencyInjection.Extensions; var builder = WebApplication.CreateBuilder(args); builder.Host.ConfigureServices(services => { services.TryAddSingleton<IService, Service1>(); }); builder.Services.TryAddSingleton<IService, Service2>(); var app = builder.Build(); // Displays Service1 only. Console.WriteLine(app.Services.GetRequiredService<IService>()); app.Run(); class Service1 : IService { } class Service2 : IService { } interface IService { }
Dalam kode sebelumnya, builder.Host.ConfigureServices
dipanggil secara sebaris, bukan ditangguhkan sampai builder.Build
dipanggil. Ini berarti bahwa Service1
ditambahkan ke IServiceCollection
sebelum Service2
dan menghasilkan Service1
yang diselesaikan untuk IService
.
Membangun pustaka untuk ASP.NET Core di .NET 6
Ekosistem .NET yang ada dibangun ekstensibilitas di sekitar IServiceCollection, , IHostBuilderdan IWebHostBuilder. Properti ini tersedia di WebApplicationBuilder sebagai Services
, Host
, dan WebHost
.
WebApplication
mengimplementasikan baik Microsoft.AspNetCore.Builder.IApplicationBuilder maupun Microsoft.AspNetCore.Routing.IEndpointRouteBuilder.
Kami mengharapkan penulis pustaka agar tetap menarget IHostBuilder
, IWebHostBuilder
, IApplicationBuilder
, dan IEndpointRouteBuilder
saat membangun komponen spesifik ASP.NET Core. Ini memastikan bahwa middleware, handler rute, atau titik ekstensibilitas lainnya terus berfungsi di berbagai model hosting.
Tanya jawab umum (FAQ)
Apakah model hosting minimal baru kurang mampu?
Tidak. Model hosting baru secara fungsional setara untuk 98% skenario yang didukung oleh
IHostBuilder
danIWebHostBuilder
. Ada beberapa skenario lanjutan yang memerlukan solusi khusus padaIHostBuilder
, tetapi kami mengharapkan skenario tersebut sangat jarang terjadi.Apakah model hosting generik tidak digunakan lagi?
Tidak. Model hosting generik adalah model alternatif yang didukung tanpa batas waktu. Host generik mendukung model hosting baru dan masih merupakan cara utama untuk menghosting aplikasi berbasis pekerja.
Apakah saya harus bermigrasi ke model hosting baru?
Tidak. Model hosting baru adalah cara yang disukai untuk menghosting aplikasi baru menggunakan .NET 6 atau yang lebih baru, tetapi Anda tidak dipaksa untuk mengubah tata letak proyek di aplikasi yang ada. Ini berarti aplikasi dapat meningkatkan dari .NET 5 ke .NET 6 dengan mengubah kerangka kerja target dalam file proyek dari
net5.0
kenet6.0
. Untuk informasi selengkapnya, lihat bagian Memperbarui kerangka kerja target di artikel ini. Namun, sebaiknya aplikasi bermigrasi ke model hosting baru untuk memanfaatkan fitur baru yang hanya tersedia untuk model hosting baru.Apakah saya harus menggunakan pernyataan tingkat atas?
Tidak. Semua templat proyek baru menggunakan pernyataan tingkat atas, tetapi API hosting baru dapat digunakan di aplikasi .NET 6 apa pun untuk menghosting server web atau aplikasi web.
Di mana saya menempatkan state yang disimpan sebagai field di
Program
atauStartup
kelas saya?Kami sangat menyarankan penggunaan injeksi dependensi (DI) untuk mengelola status di aplikasi ASP.NET Core.
Ada dua pendekatan untuk menyimpan status di luar DI:
Simpan status di kelas lain. Menyimpan di kelas mengasumsikan status statis yang dapat diakses dari mana saja di aplikasi.
Gunakan kelas yang
Program
dihasilkan oleh pernyataan tingkat atas untuk menyimpan status. MenggunakanProgram
untuk menyimpan status adalah pendekatan semantik:var builder = WebApplication.CreateBuilder(args); ConfigurationValue = builder.Configuration["SomeKey"] ?? "Hello"; var app = builder.Build(); app.MapGet("/", () => ConfigurationValue); app.Run(); partial class Program { public static string? ConfigurationValue { get; private set; } }
Bagaimana jika saya menggunakan kontainer injeksi dependensi kustom?
Kontainer DI yang kustom didukung. Misalnya, lihat Kontainer injeksi dependensi kustom (DI).
Apakah
WebApplicationFactory
danTestServer
masih bekerja?Ya.
WebApplicationFactory<TEntryPoint>
adalah cara untuk menguji model hosting baru. Misalnya, lihat Menguji denganWebApplicationFactory
atauTestServer
.
Blazor
Setelah mengikuti panduan sebelumnya dalam artikel ini untuk memperbarui aplikasi ke .NET 6, adopsi fitur tertentu dengan mengikuti tautan di Apa yang baru di ASP.NET Core di .NET 6.
Untuk mengadopsi semua fitur 6.0 baru untuk Blazor aplikasi, kami merekomendasikan proses berikut:
- Buat proyek 6.0 Blazor baru dari salah satu template proyek. Untuk informasi selengkapnya, lihat Alat untuk ASP.NET Core Blazor.
- Pindahkan komponen dan kode aplikasi ke aplikasi 6.0 yang membuat modifikasi untuk mengadopsi fitur .NET 6 baru.
Memigrasikan proyek SPA
Memigrasikan aplikasi Angular dari ekstensi SPA
Lihat masalah GitHub ini
Memigrasikan aplikasi React dari ekstensi SPA
Lihat Memigrasikan aplikasi React dari Ekstensi Spa dalam masalah GitHub ini
Memperbarui gambar Docker
Untuk aplikasi yang menggunakan Docker, perbarui pernyataan dan skrip Dockerfile. Gunakan gambar dasar yang menyertakan ASP.NET Core dalam runtime .NET 6. Pertimbangkan perbedaan perintah berikut docker pull
antara ASP.NET Core di .NET 5 dan .NET 6:
- docker pull mcr.microsoft.com/dotnet/aspnet:5.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Lihat Isu GitHub Perubahan yang Mengganggu: Format pencatat konsol default diatur ke JSON.
Perubahan pada ASP.NET Core Razor SDK
Pengkompilasi Razor sekarang memanfaatkan fitur generator sumber baru untuk menghasilkan file C# yang dikompilasi dari Razor tampilan dan halaman dalam proyek. Di versi sebelumnya:
- Kompilasi bergantung pada target
RazorGenerate
danRazorCompile
untuk menghasilkan kode hasil. Target ini tidak lagi valid. Di .NET 6, pembuatan kode dan kompilasi didukung oleh satu panggilan ke pengkompilasi.RazorComponentGenerateDependsOn
masih didukung untuk menentukan dependensi yang diperlukan sebelum build berjalan. - Rakitan terpisah Razor ,
AppName.Views.dll
, dihasilkan yang berisi jenis tampilan yang dikompilasi dalam aplikasi. Perilaku ini telah tidak digunakan lagi dan satu rakitanAppName.dll
diproduksi yang berisi jenis aplikasi dan tampilan yang dihasilkan. - Jenis aplikasi di
AppName.Views.dll
adalah publik. Di .NET 6, jenis aplikasi berada diAppName.dll
tetapi adalahinternal sealed
. Aplikasi yang melakukan penemuan jenis padaAppName.Views.dll
tidak akan dapat melakukan penemuan jenis padaAppName.dll
. Berikut ini menunjukkan perubahan API:
- public class Views_Home_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
+ internal sealed class Views_Home_Index : global::Microsoft.AspNetCore.Mvc.Razor.RazorPage<dynamic>
Buat perubahan berikut:
- Properti berikut ini tidak lagi berlaku dengan model kompilasi langkah tunggal.
RazorTargetAssemblyAttribute
RazorTargetName
EnableDefaultRazorTargetAssemblyInfoAttributes
UseRazorBuildServer
GenerateRazorTargetAssemblyInfo
GenerateMvcApplicationPartsAssemblyAttributes
Untuk informasi selengkapnya, lihat Razor pengompilator tidak lagi menghasilkan assembly Views.
Templat proyek menggunakan Duende Identity Server
Templat proyek sekarang menggunakan Duende Identity Server.
Penting
Duende Identity Server adalah produk sumber terbuka dengan perjanjian lisensi timbal balik. Jika Anda berencana untuk menggunakan Duende Identity Server dalam produksi, Anda mungkin diharuskan untuk mendapatkan lisensi komersial dari Duende Software dan membayar biaya lisensi. Untuk informasi selengkapnya, lihat Perangkat Lunak Duende: Lisensi.
Untuk mempelajari cara menggunakan Microsoft Azure Active Directory untuk ASP.NET Core Identity, lihat Identity (repositori GitHub dotnet/aspnetcore).
DbSet<Key>
Tambahkan properti bernama Keys
ke setiap IdentityDbContext
untuk memenuhi persyaratan baru dari versi yang diperbarui.IPersistedGrantDbContext
Kunci diperlukan sebagai bagian dari kontrak dengan toko-toko dari Duende Identity Server.
public DbSet<Key> Keys { get; set; }
Nota
Migrasi yang ada harus dibuat ulang untuk Duende Identity Server.
Sampel kode dimigrasikan ke ASP.NET Core di .NET 6
Sampel kode dimigrasikan ke model hosting minimal baru di 6.0
Tinjau perubahan yang signifikan
Lihat sumber daya berikut:
- Identity: Versi Bootstrap default UI diubah
- Perubahan besar untuk migrasi dari versi .NET 5 ke .NET 6: Termasuk ASP.NET Core dan Entity Framework Core.
-
Repositori Pengumuman GitHub (aspnet/Announcements,
6.0.0
label): Termasuk informasi yang berdampak besar dan tidak berdampak besar.
Jenis referensi dapat bernilai nol (NRTs) dan analisis statis keadaan-nol oleh .NET compiler
Template proyek ASP.NET Core menggunakan jenis referensi nullable (NRTs), dan kompilator .NET melakukan analisis statis keadaan null. Fitur-fitur ini dirilis dengan C# 8 dan diaktifkan secara default untuk aplikasi yang dihasilkan menggunakan ASP.NET Core di .NET 6 (C# 10) atau yang lebih baru.
Peringatan analisis statis null-state dari kompiler .NET dapat digunakan sebagai panduan untuk memperbarui contoh dokumentasi atau aplikasi secara lokal atau diabaikan. Analisis status null secara statis dapat dinonaktifkan dengan cara mengubah Nullable
ke disable
di dalam file proyek aplikasi, yang kami hanya rekomendasikan untuk contoh dokumentasi dan contoh aplikasi jika peringatan kompilator mengganggu saat mempelajari tentang .NET.
Kami tidak menyarankan untuk menonaktifkan pemeriksaan status null dalam proyek produksi.
Untuk informasi selengkapnya mengenai NRTs, properti MSBuild Nullable
, dan pembaruan aplikasi (termasuk panduan #pragma
), lihat sumber daya berikut di dalam dokumentasi C#:
- Jenis referensi yang dapat diubah ke null
- Tipe referensi nullable (referensi C#)
- Mempelajari teknik untuk mengatasi peringatan yang dapat diubah ke null
- Memperbarui basis kode dengan jenis referensi dapat diubah ke null untuk meningkatkan peringatan diagnostik null
- Atribut untuk analisis statis keadaan null
- ! operator (null-forgiving) (referensi C#)
Modul Inti ASP.NET (ANCM)
Jika ASP.NET Core Module (ANCM) bukan komponen yang dipilih saat Visual Studio diinstal atau jika versi ANCM sebelumnya diinstal pada sistem, unduh Penginstal Bundel Hosting .NET Core terbaru (unduh langsung) dan jalankan alat penginstal. Untuk informasi selengkapnya, lihat Bundel Hosting.
Perubahan nama aplikasi
Di .NET 6, WebApplicationBuilder menormalkan jalur akar konten ke akhir dengan DirectorySeparatorChar. Sebagian besar aplikasi yang bermigrasi dari HostBuilder atau WebHostBuilder tidak akan memiliki nama aplikasi yang sama karena tidak dinormalisasi. Untuk informasi selengkapnya, lihat SetApplicationName
Sumber daya tambahan
ASP.NET Core