ASP.NET Core 5.0'dan 6.0'a geçiş
Bu makalede, mevcut bir ASP.NET Core 5.0 projesinin ASP.NET Core 6.0'a nasıl güncelleştirilecekleri açıklanmaktadır. ASP.NET Core 3.1'den ASP.NET Core 6.0'a geçiş hakkında yönergeler için bkz . ASP.NET Core 3.1'den 6.0'a geçiş.
Önkoşullar
- Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
- .NET 6.0 SDK
içinde .NET SDK sürümünü güncelleştirme global.json
Belirli bir .NET SDK sürümünü hedeflemek için bir global.json
dosyaya güveniyorsanız, özelliğini yüklü .NET 6.0 SDK sürümüne güncelleştirin version
. Örneğin:
{
"sdk": {
- "version": "5.0.100"
+ "version": "6.0.100"
}
}
Hedef çerçeveyi güncelleştirme
Proje dosyasının Target Framework Takma Adını (TFM) olarak net6.0
güncelleştirin:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>net5.0</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
Paket başvurularını güncelleştirme
Proje dosyasında, her Microsoft.AspNetCore.*
birinin ve Microsoft.Extensions.*
paket başvurusunun Version
özniteliğini 6.0.0 veya üzeri olarak güncelleştirin. Örneğin:
<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>
Yeni barındırma modeli
ASP.NET Core uygulamaları için yeni .NET 6 minimal barındırma modeli yalnızca bir dosya ve birkaç satır kod gerektirir. 6.0'a geçiş yapan uygulamaların yeni minimal barındırma modelini kullanması gerekmez. Daha fazla bilgi için aşağıdaki bölümdeki 6.0 sürümüne geçiş yapan uygulamaların yeni minimum barındırma modelini kullanması gerekmez bölümüne bakın.
ASP.NET Core boş şablonundaki aşağıdaki kod, yeni minimum barındırma modelini kullanarak bir uygulama oluşturur:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
En düşük barındırma modeli:
- Uygulama oluşturmak için gereken dosya ve kod satırlarının sayısını önemli ölçüde azaltır. Dört kod satırıyla yalnızca bir dosya gereklidir.
Startup.cs
veProgram.cs
öğesini tekProgram.cs
bir dosyada birleştirir.- Bir uygulama için gereken kodu en aza indirmek için üst düzey deyimleri kullanır.
- Gerekli deyim satırı sayısını
using
ortadan kaldırmak veya en aza indirmek için genelusing
yönergeleri kullanır.
Aşağıdaki kod, kullanılmayan deyimleri kaldırılmış using
bir ASP.NET Core 5 Web App şablonundaki (RazorSayfalar) ve Program.cs
dosyalarını görüntülerStartup.cs
:
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>();
});
}
}
ASP.NET Core 6'da, önceki kod aşağıdakilerle değiştirilir:
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();
Yukarıdaki ASP.NET Core 6 örneğinde aşağıdakiler gösterilmektedir:
- ConfigureServices ile
WebApplication.Services
değiştirilir. builder.Build()
değişkenineapp
yapılandırılmış WebApplication bir döndürür. Configure , kullanılarakapp
aynı hizmetlere yapılan yapılandırma çağrılarıyla değiştirilir.
ASP.NET Core 5 Startup
kodunu en düşük barındırma modelini kullanarak ASP.NET Core 6'ya geçirmenin ayrıntılı örnekleri bu belgenin devamında verilmiştir.
Web Uygulaması şablonu için oluşturulan diğer dosyalarda birkaç değişiklik vardır:
Index.cshtml
vePrivacy.cshtml
kullanılmayan deyimlerinin kaldırılmasınıusing
sağlayın.RequestId
inError.cshtml
null atanabilir başvuru türü (NRT) olarak bildirilir:
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
- ve
appsettings.Development.json
içindeappsettings.json
günlük düzeyi varsayılanları değişti:
- "Microsoft": "Warning",
- "Microsoft.Hosting.Lifetime": "Information"
+ "Microsoft.AspNetCore": "Warning"
Önceki ASP.NET Core şablon kodunda olarak "Microsoft": "Warning"
değiştirildi "Microsoft.AspNetCore": "Warning"
. Bu değişiklik, dışındaki Microsoft.AspNetCore
tüm bilgi iletilerinin ad alanından günlüğe kaydedilmesine Microsoft
neden olur. Örneğin, Microsoft.EntityFrameworkCore
artık bilgi düzeyinde günlüğe kaydedilir.
Yeni barındırma modeli hakkında daha fazla ayrıntı için Sık sorulan sorular bölümüne bakın. NRTs ve .NET derleyici null durum analizinin benimsenmesi hakkında daha fazla bilgi için Null atanabilir başvuru türleri (NTS) ve .NET derleyici null durum statik analizi bölümüne bakın.
6.0 ve üzeri sürümlere geçiş yapan uygulamaların yeni minimum barındırma modelini kullanması gerekmez
Startup
ve ASP.NET Core 3.1 ve 5.0 şablonları tarafından kullanılan Genel Ana Bilgisayar tam olarak desteklenir.
Başlangıç'ı yeni minimal barındırma modeliyle kullanma
ASP.NET Core 3.1 ve 5.0 uygulamaları yeni minimal barındırma modeliyle kodlarını Startup
kullanabilir. Minimum barındırma modeliyle kullanmak Startup
aşağıdaki avantajlara sahiptir:
- sınıfını çağırmak
Startup
için gizli yansıma kullanılmaz. - Geliştirici çağrısını
Startup
denetlediğinden zaman uyumsuz kod yazılabilir. - ve
Configure
aralarına yerleşebilenConfigureServices
kod yazılabilir.
Yeni minimal barındırma modeliyle kod kullanmanın Startup
küçük bir sınırlaması, içine bir bağımlılık Configure
eklemek için içindeki Program.cs
hizmetin el ile çözümlenmesi gerektiğidir.
ASP.NET Core 3.1 veya 5.0 Razor Pages şablonu tarafından oluşturulan aşağıdaki kodu göz önünde bulundurun:
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();
});
}
}
Önceki kod yeni en düşük barındırma modeline geçirildi:
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();
});
}
}
Önceki kodda, if (env.IsDevelopment())
geliştirme modunda geliştirici özel durum sayfası ara yazılımı varsayılan olarak etkinleştirildiğinden blok kaldırılır. Daha fazla bilgi için sonraki bölümdeki ASP.NET Core 5 ve 6 barındırma modelleri arasındaki farklar bölümüne bakın.
Özel bağımlılık ekleme (DI) kapsayıcısı kullanırken aşağıdaki vurgulanmış kodu ekleyin:
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();
});
}
}
En düşük barındırma modelini kullanırken uç nokta yönlendirme ara yazılımı, ara yazılım işlem hattının tamamını sarmalar, bu nedenle yollara UseRouting
açık çağrılar yapmanız veya UseEndpoints
yolları kaydetmeniz gerekmez. UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için hala kullanılabilir, ancak UseRouting
yolların ara yazılım işlem hattının başında eşleşmesi gerekiyorsa açıkça çağrılması gerekmez.
Aşağıdaki kodda ve UseEndpoints
çağrıları UseRouting
öğesinden Startup
kaldırılır. MapRazorPages
içinde çağrılır 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();
Yeni minimal barındırma modeliyle kullanırken Startup
aşağıdaki farkı aklınızda bulundurun:
Program.cs
sınıfının örneklemesini ve ömrünüStartup
denetler.- yöntemine
Configure
eklenen ek hizmetlerin sınıfı tarafındanProgram
el ile çözülmesi gerekir.
ASP.NET Core 5 ve 6 barındırma modelleri arasındaki farklar
- Geliştirme modunda geliştirici özel durum sayfası ara yazılımı varsayılan olarak etkindir.
- Uygulama adı varsayılan olarak giriş noktası derlemesinin adını kullanır:
Assembly.GetEntryAssembly().GetName().FullName
. bir kitaplıkta kullanırken WebApplicationBuilder , MVC'nin uygulama parçası bulma işleminin çalışmasını sağlamak için uygulama adını açıkça kitaplığın derlemesi olarak değiştirin. Ayrıntılı yönergeler için bu belgedeki içerik kökünü, uygulama adını ve ortamı değiştirme bölümüne bakın. - Uç nokta yönlendirme ara yazılımı, ara yazılım işlem hattının tamamını sarmalar, bu nedenle yollara
UseRouting
açık çağrılar yapmanız veyaUseEndpoints
yolları kaydetmeniz gerekmez.UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için hala kullanılabilir, ancakUseRouting
yolların ara yazılım işlem hattının başında eşleşmesi gerekiyorsa açıkça çağrılması gerekmez. - İşlem hattı herhangi bir IStartupFilter çalıştırmadan önce oluşturulur, bu nedenle işlem hattı oluşturulurken oluşan özel durumlar çağrı zincirine
IStartupFilter
görünmez. - EF geçişleri gibi bazı araçlar, uygulama bağlamında özel mantık yürütmek üzere uygulamaya
IServiceProvider
erişmek için kullanırProgram.CreateHostBuilder
. Bu araçlar, uygulama bağlamında özel mantık yürütmek için yeni bir teknik kullanacak şekilde güncelleştirildi. Entity Framework Geçişleri , bu şekilde kullanılanProgram.CreateHostBuilder
bir araç örneğidir. Araçların yeni modeli kullanacak şekilde güncelleştirildiğinden emin olmak için çalışıyoruz. - sınıfından
Startup
farklı olarak, en düşük konak hizmet sağlayıcısı örneği oluşturulurken otomatik olarak bir DI kapsamı yapılandırmaz. Kapsamın gerekli olduğu bağlamlar için, yeni bir kapsamın örneğini oluşturmak için IServiceScopeFactory.CreateScope ile çağrı IServiceScope yapılması gerekir. Daha fazla bilgi için bkz . Uygulama başlangıcında bir hizmeti çözümleme. - oluşturulduktan WebApplicationBuildersonra uygulama adı, ortam veya içerik kökü gibi konak ayarlarını değiştirmek mümkün değildir. Konak ayarlarını değiştirme hakkında ayrıntılı yönergeler için, bkz . Özelleştirme
IHostBuilder
veyaIWebHostBuilder
. Aşağıdaki vurgulanmış API'ler özel durum oluşturur:
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();
Startup
sınıfı veyaWebApplicationBuilder.WebHost
öğesindenWebApplicationBuilder.Host
kullanılamaz. Aşağıdaki vurgulanan kod bir özel durum oluşturur: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();
IHostBuilder üzerindeki WebApplicationBuilder
WebApplicationBuilder.Host
uygulaması , ConfigureAppConfigurationveya ConfigureHostConfiguration yöntemlerinin yürütülmesini ConfigureServicesertelemez. Yürütmenin ertelenmemesi, veIConfiguration
üzerinde yapılan değişiklikleri gözlemlemek için kullanarak WebApplicationBuilder kod kullanılmasınaIServiceCollection
izin verir. Aşağıdaki örnek yalnızca olarakIService
eklerService1
: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 { }
Önceki kodda, geri çağırma çağrılana builder.Host.ConfigureServices
kadar builder.Build
ertelenme yerine satır içi olarak çağrılır. Bu, Service1
öncekine IServiceCollection
Service2
eklendiği ve Service1
için IService
çözümlendiği anlamına gelir.
ASP.NET Core 6 için kitaplık oluşturma
Mevcut .NET ekosistemi , IHostBuilderve IWebHostBuilderçevresinde IServiceCollectionyerleşik genişletilebilirlik sağlar. Bu özellikler üzerinde WebApplicationBuilder , Host
ve WebHost
olarak Services
kullanılabilir.
WebApplication
hem Microsoft.AspNetCore.Routing.IEndpointRouteBuilderhem de Microsoft.AspNetCore.Builder.IApplicationBuilder uygular.
Kitaplık yazarlarının ASP.NET Core'a özgü bileşenleri oluştururken , IWebHostBuilder
, IApplicationBuilder
ve IEndpointRouteBuilder
hedeflerini oluşturmaya IHostBuilder
devam etmesini bekliyoruz. Bu, ara yazılımınızın, yol işleyicinizin veya diğer genişletilebilirlik noktalarınızın farklı barındırma modellerinde çalışmaya devam etmesini sağlar.
Sık sorulan sorular (SSS)
Yeni minimal barındırma modeli daha az yetenekli mi?
Hayır Yeni barındırma modeli ve tarafından
IHostBuilder
desteklenen senaryoların %98'i için işlevsel olarak eşdeğerdirIWebHostBuilder
. üzerindeIHostBuilder
belirli geçici çözümler gerektiren bazı gelişmiş senaryolar vardır, ancak bunların son derece nadir olmasını bekliyoruz.Genel barındırma modeli kullanım dışı mı?
Hayır Genel barındırma modeli, süresiz olarak desteklenen alternatif bir modeldir. Genel konak, yeni barındırma modelini temel alır ve yine de çalışan tabanlı uygulamaları barındırmanın birincil yoludur.
Yeni barındırma modeline geçmem gerekiyor mu?
Hayır Yeni barındırma modeli, .NET 6 ve üzerini kullanarak yeni uygulamaları barındırmanın tercih edilen yoludur, ancak mevcut uygulamalarda proje düzenini değiştirmek zorunda kalmazsınız. Bu, uygulamaların proje dosyasındaki hedef çerçeveyi olarak değiştirerek .NET 5'ten
net5.0
.NET 6'yanet6.0
yükseltebileceği anlamına gelir. Daha fazla bilgi için bu makaledeki Hedef çerçeveyi güncelleştirme bölümüne bakın. Ancak, yalnızca yeni barındırma modelinde kullanılabilen yeni özelliklerden yararlanmak için uygulamaların yeni barındırma modeline geçirilmesini öneririz.Üst düzey deyimleri kullanmam gerekiyor mu?
Hayır Yeni proje şablonlarının tümü üst düzey deyimleri kullanır , ancak yeni barındırma API'leri bir web sunucusunu veya web uygulamasını barındırmak için herhangi bir .NET 6 uygulamasında kullanılabilir.
Veya
Startup
sınıfımdaProgram
alan olarak depolanan durumu nereye koymalıyım?ASP.NET Core uygulamalarında akış durumu için bağımlılık ekleme (DI) kullanmanızı kesinlikle öneririz.
DI dışında durum depolamak için iki yaklaşım vardır:
Durumu başka bir sınıfta depolayın. Bir sınıfta depolama, uygulamanın herhangi bir yerinden erişilebilen statik bir durum olduğunu varsayar.
Durumu depolamak
Program
için en üst düzey deyimler tarafından oluşturulan sınıfını kullanın.Program
Durum depolamak için kullanmak anlamsal bir yaklaşımdır: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; } }
Özel bağımlılık ekleme kapsayıcısı kullanıyorsam ne olur?
Özel DI kapsayıcıları desteklenir. Örnek için bkz . Özel bağımlılık ekleme (DI) kapsayıcısı.
Çalışıyor ve
TestServer
hala çalışıyor muWebApplicationFactory
?Evet.
WebApplicationFactory<TEntryPoint>
yeni barındırma modelini test etmenin yoludur. Bir örnek için, bkz. veyaTestServer
ileWebApplicationFactory
test edin.
Blazor
Bir uygulamayı 6.0'a güncelleştirmek için bu makalenin önceki bölümlerindeki yönergeleri takip ettikten sonra, ASP.NET Core 6.0'daki yenilikler başlığındaki bağlantıları izleyerek belirli özellikleri benimseyin.
Uygulamalar için tüm yeni 6.0 özelliklerini benimsemek için Blazor aşağıdaki işlemi öneririz:
- Proje şablonlarından birinden Blazor yeni bir 6.0 Blazor projesi oluşturun. Daha fazla bilgi için bkz . ASP.NET Core Blazoriçin Araçlar.
- Yeni 6.0 özelliklerini benimsemek için değişiklik yaparak uygulamanın bileşenlerini ve kodunu 6.0 uygulamasına taşıyın.
SPA projelerini geçirme
Angular uygulamalarını SPA uzantılarından geçirme
REACT uygulamalarını SPA uzantılarından geçirme
Bu GitHub sorununda React uygulamalarını Spa Uzantılarından Geçirme konusuna bakın
Docker görüntülerini güncelleştirme
Docker kullanan uygulamalar için Dockerfile FROM
deyimlerinizi ve betiklerinizi güncelleştirin. ASP.NET Core 6.0 çalışma zamanını içeren bir temel görüntü kullanın. ASP.NET Core 5.0 ile 6.0 arasındaki aşağıdaki docker pull
komut farkını göz önünde bulundurun:
- docker pull mcr.microsoft.com/dotnet/aspnet:5.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Bkz. GitHub sorunu Hataya Neden Olan Değişiklik: Varsayılan konsol günlükçü biçimi JSON olarak ayarlanmıştır.
ASP.NET Core Razor SDK'sı değişiklikleri
Derleyici Razor artık projedeki görünümlerden ve sayfalardan derlenmiş C# dosyaları oluşturmak için yeni kaynak oluşturucular özelliğinden Razor yararlanıyor. Önceki sürümlerde:
- Derleme, oluşturulan kodu üretmek için ve
RazorCompile
hedeflerine dayanırRazorGenerate
. Bu hedefler artık geçerli değil. .NET 6'da hem kod oluşturma hem de derleme, derleyiciye tek bir çağrıyla desteklenir.RazorComponentGenerateDependsOn
derleme çalıştırılmadan önce gereken bağımlılıkları belirtmek için hala desteklenmektedir. - Bir uygulamada derlenmiş görünüm türlerini içeren ayrı Razor bir derleme
AppName.Views.dll
oluşturulmuştur. Bu davranış kullanım dışı bırakıldı ve hem uygulama türlerini hem de oluşturulan görünümleri içeren tek bir derlemeAppName.dll
oluşturulur. - içindeki
AppName.Views.dll
uygulama türleri geneldi. .NET 6'da, uygulama türleri içindedirAppName.dll
ancak şeklindedirinternal sealed
. Üzerinde tür bulmaAppName.Views.dll
işlemi yapan uygulamalar üzerindeAppName.dll
tür bulma yapamaz. Aşağıda API değişikliği gösterilmektedir:
- 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>
Aşağıdaki değişiklikleri yapın:
- Aşağıdaki özellikler artık tek adımlı derleme modeliyle uygulanamaz.
RazorTargetAssemblyAttribute
RazorTargetName
EnableDefaultRazorTargetAssemblyInfoAttributes
UseRazorBuildServer
GenerateRazorTargetAssemblyInfo
GenerateMvcApplicationPartsAssemblyAttributes
Daha fazla bilgi için bkz. Razor Derleyici artık Görünümler derlemesi üretmez.
Proje şablonları Duende Identity Server kullanıyor
Proje şablonları artık Duende Identity Server kullanıyor. Geçiş kılavuzu için bkz . IdentityServer4 v4.1 to Duende IdentityServer v5.
Önemli
Duende Identity Server, karşılıklı lisans sözleşmesine sahip açık kaynak bir üründür. Duende Server'ı üretim ortamında kullanmayı planlıyorsanız Duende Identity Software'ten ticari lisans almanız ve lisans ücreti ödemeniz gerekebilir. Daha fazla bilgi için bkz . Duende Yazılımı: Lisanslar.
ASP.NET Core Identityiçin Microsoft Azure Active Directory'yi kullanmayı öğrenmek için bkz Identity . (dotnet/aspnetcore GitHub deposu).
güncelleştirilmiş sürümünden IPersistedGrantDbContext
yeni bir gereksinimi karşılamak için her IdentityDbContext
öğesine adlı Keys
bir DbSet<Key>
özellik ekleyin. Anahtarlar Duende Identity Server'ın depolarıyla yapılan sözleşmenin bir parçası olarak gereklidir.
public DbSet<Key> Keys { get; set; }
Not
Duende Identity Server için mevcut geçişlerin yeniden oluşturulması gerekir.
ASP.NET Core 6.0'a geçirilen kod örnekleri
6.0 sürümünde yeni minimal barındırma modeline geçirilen kod örnekleri
Hataya neden olan değişiklikleri gözden geçirme
Aşağıdaki kaynaklara bakın:
- Identity: Kullanıcı arabiriminin varsayılan Bootstrap sürümü değiştirildi
- Sürüm 5.0'dan 6.0'a geçiş için hataya neden olan değişiklikler: ASP.NET Core ve Entity Framework Core içerir.
- Duyurular GitHub deposu (aspnet/Announcements,
6.0.0
label): Hataya neden olan ve bozulmayan bilgileri içerir.
Boş değer atanabilir başvuru türleri (NTS) ve .NET derleyici null durum statik analizi
ASP.NET Çekirdek proje şablonları null atanabilir başvuru türlerini (NTS) kullanır ve .NET derleyicisi null durum statik analizi gerçekleştirir. Bu özellikler C# 8 ile yayımlandı ve ASP.NET Core 6.0 (C# 10) veya üzeri kullanılarak oluşturulan uygulamalar için varsayılan olarak etkinleştirilir.
.NET derleyicisinin null durum statik çözümleme uyarıları, belge örneğini veya örnek uygulamayı yerel olarak güncelleştirmek için bir kılavuz görevi görebilir veya yoksayılabilir. Null durum statik analizi, uygulamanın proje dosyasında olarak ayarlanarak Nullable
disable
devre dışı bırakılabilir. Bu, yalnızca .NET hakkında bilgi edinirken derleyici uyarıları dikkat dağıtıcıysa belge örnekleri ve örnek uygulamalar için önerilir. Üretim projelerinde null durum denetimini devre dışı bırakmanızı önermiyoruz.
NRT'ler, MSBuild Nullable
özelliği ve uygulamaları güncelleştirme (yönergeler dahil) hakkında daha fazla bilgi için #pragma
C# belgelerinde aşağıdaki kaynaklara bakın:
- Boş değer atanabilir başvuru türleri
- Boş değer atanabilir başvuru türleri (C# başvurusu)
- Boş değer atanabilir uyarıları çözümleme tekniklerini öğrenin
- Null tanılama uyarılarını geliştirmek için bir kod tabanını null atanabilir başvuru türleriyle güncelleştirme
- Null durum statik analizi için öznitelikler
- ! (null-forgiving) işleci (C# başvurusu)
ASP.NET Çekirdek Modülü (ANCM)
Visual Studio yüklenirken ASP.NET Çekirdek Modülü (ANCM) seçili bir bileşen değilse veya sistemde ANCM'nin önceki bir sürümü yüklüyse, en son .NET Core Barındırma Paketi Yükleyicisi'ni (doğrudan indirme) indirin ve yükleyiciyi çalıştırın. Daha fazla bilgi için bkz . Barındırma Paketi.
Uygulama adı değişikliği
.NET 6'da içerik WebApplicationBuilder kök yolunu ile DirectorySeparatorCharbitmesi için normalleştirir. Veya WebHostBuilder uygulamasından HostBuilder geçiş yapılan uygulamaların çoğu normalleştirilemediği için aynı uygulama adına sahip olmaz. Daha fazla bilgi için bkz . SetApplicationName
Ek kaynaklar
ASP.NET Core