Migrasi dari ASP.NET Core 5.0 ke 6.0
Artikel ini menjelaskan cara memperbarui proyek ASP.NET Core 5.0 yang ada ke ASP.NET Core 6.0. Untuk petunjuk tentang cara bermigrasi dari ASP.NET Core 3.1 ke ASP.NET Core 6.0, lihat Migrasi dari ASP.NET Core 3.1 ke 6.0.
Prasyarat
- Visual Studio 2022 dengan beban kerja ASP.NET serta pengembangan web.
- .NET 6.0 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.0 SDK yang diinstal. Contohnya:
{
"sdk": {
- "version": "5.0.100"
+ "version": "6.0.100"
}
}
Memperbarui kerangka kerja target
Perbarui Moniker Kerangka Kerja Target (TFM) 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, perbarui atribut referensi Version
masing-masing Microsoft.AspNetCore.*
dan Microsoft.Extensions.*
paket ke 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 6.0 tidak perlu menggunakan model hosting minimal baru. Untuk informasi selengkapnya, lihat Aplikasi yang bermigrasi ke 6.0 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 minimal:
- Secara signifikan mengurangi jumlah file dan baris kode yang diperlukan untuk membuat aplikasi. Hanya satu file yang diperlukan dengan empat baris kode.
- Menyaingkan
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 Startup.cs
file dan Program.cs
dari templat ASP.NET Core 5 Web App (Razor Pages) dengan pernyataan yang tidak using
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>();
});
}
}
Di ASP.NET Core 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();
Sampel ASP.NET Core 6 sebelumnya menunjukkan caranya:
- 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 kode ASP.NET Core 5 Startup
ke ASP.NET Core 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 pernyataan yang tidak digunakanusing
dihapus.RequestId
dinyatakanError.cshtml
sebagai jenis referensi nullable (NRT):
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
- Default tingkat log 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 pengelogan semua pesan informasi dari Microsoft
namespace kecuali Microsoft.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 NRTs dan analisis null-state kompilator .NET, lihat bagian Analisis statis null-state jenis referensi nullable (NRTs) dan .NET.
Aplikasi yang bermigrasi ke atau menggunakan 6.0 dan 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
ASP.NET aplikasi 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 bahwa interleave
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 halaman pengecualian pengembang diaktifkan secara default. Untuk informasi selengkapnya, lihat Perbedaan antara model hosting ASP.NET Core 5 dan 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 masaStartup
pakai kelas.- Setiap layanan tambahan yang disuntikkan ke
Configure
dalam metode perlu diselesaikan secara manual olehProgram
kelas.
Perbedaan antara model hosting ASP.NET Core 5 dan 6
- Dalam mode pengembangan, middleware halaman pengecualian pengembang diaktifkan secara default.
- Nama aplikasi default ke nama perakitan titik entri:
Assembly.GetEntryAssembly().GetName().FullName
. Saat menggunakan WebApplicationBuilder di pustaka, ubah nama aplikasi secara eksplisit ke perakitan pustaka untuk memungkinkan penemuan bagian aplikasi MVC 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. - Alur dibuat sebelum eksekusi apa punIStartupFilter, oleh karena itu pengecualian yang disebabkan saat membangun alur tidak terlihat oleh
IStartupFilter
rantai panggilan. - Beberapa alat, seperti migrasi EF, digunakan
Program.CreateHostBuilder
untuk mengakses aplikasiIServiceProvider
untuk 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. Startup
Tidak seperti kelas , host minimal tidak secara otomatis mengonfigurasi cakupan DI saat membuat instans 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 .WebApplicationBuilder 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
panggilan balik dipanggil sebaris daripada ditangguhkan sampai builder.Build
dipanggil. Ini berarti bahwa Service1
ditambahkan ke IServiceCollection
sebelumnya Service2
dan menghasilkan Service1
diselesaikan untuk IService
.
Membangun pustaka untuk ASP.NET Core 6
Ekosistem .NET yang ada dibangun ekstensibilitas di sekitar IServiceCollection, , IHostBuilderdan IWebHostBuilder. Properti ini tersedia di WebApplicationBuilder sebagai Services
, Host
, dan WebHost
.
WebApplication
mengimplementasikan dan Microsoft.AspNetCore.Builder.IApplicationBuilder Microsoft.AspNetCore.Routing.IEndpointRouteBuilder.
Kami mengharapkan penulis pustaka untuk terus menargetkan 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.
Pertanyaan 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 dan 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 status yang disimpan sebagai bidang di kelas atau
Startup
sayaProgram
?Kami sangat menyarankan penggunaan injeksi dependensi (DI) untuk mengalirkan 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 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 6.0, adopsi fitur tertentu dengan mengikuti tautan di Apa yang baru di ASP.NET Core 6.0.
Untuk mengadopsi semua fitur 6.0 baru untuk Blazor aplikasi, kami merekomendasikan proses berikut:
- Buat proyek 6.0 Blazor baru dari salah Blazor satu templat 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 6.0 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 FROM
Anda. Gunakan gambar dasar yang menyertakan runtime ASP.NET Core 6.0. Pertimbangkan perbedaan perintah berikut docker pull
antara ASP.NET Core 5.0 dan 6.0:
- docker pull mcr.microsoft.com/dotnet/aspnet:5.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Lihat Masalah GitHub Melanggar Perubahan: 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
RazorGenerate
target danRazorCompile
untuk menghasilkan kode yang dihasilkan. 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 penemuanAppName.Views.dll
jenis pada tidak akan dapat melakukan penemuan jenis diAppName.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>
Lakukan perubahan berikut:
- Properti berikut ini tidak lagi berlaku dengan model kompilasi langkah tunggal.
RazorTargetAssemblyAttribute
RazorTargetName
EnableDefaultRazorTargetAssemblyInfoAttributes
UseRazorBuildServer
GenerateRazorTargetAssemblyInfo
GenerateMvcApplicationPartsAssemblyAttributes
Untuk informasi selengkapnya, lihat Razor pengkompilasi tidak lagi menghasilkan rakitan Tampilan.
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 penyimpanan Duende Identity Server.
public DbSet<Key> Keys { get; set; }
Catatan
Migrasi yang ada harus dibuat ulang untuk Duende Identity Server.
Sampel kode dimigrasikan ke ASP.NET Core 6.0
Sampel kode dimigrasikan ke model hosting minimal baru di 6.0
Tinjau perubahan yang melanggar
Lihat sumber daya berikut:
- Identity: Versi Bootstrap default UI diubah
- Melanggar perubahan untuk migrasi dari versi 5.0 ke 6.0: Termasuk ASP.NET Core dan Entity Framework Core.
- Pengumuman repositori GitHub (aspnet/Pengumuman,
6.0.0
label): Termasuk informasi yang melanggar dan tidak melanggar.
Jenis referensi nullable (NRTs) dan .NET compiler null-state static analysis
ASP.NET Templat proyek Core menggunakan jenis referensi nullable (NRTs), dan kompilator .NET melakukan analisis statis status null. Fitur-fitur ini dirilis dengan C# 8 dan diaktifkan secara default untuk aplikasi yang dihasilkan menggunakan ASP.NET Core 6.0 (C# 10) atau yang lebih baru.
Peringatan analisis statis status null pengompilasi .NET dapat berfungsi sebagai panduan untuk memperbarui contoh dokumentasi atau contoh aplikasi secara lokal atau diabaikan. Analisis statis status null dapat dinonaktifkan dengan mengatur Nullable
ke disable
dalam file proyek aplikasi, yang hanya kami 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 tentang NRTs, properti MSBuild Nullable
, dan memperbarui aplikasi (termasuk #pragma
panduan), lihat sumber daya berikut dalam dokumentasi C#:
- Jenis referensi yang dapat diubah ke null
- Jenis 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 status 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