Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, .NET 5 projesindeki mevcut bir ASP.NET Core'un .NET 6'ya nasıl güncelleştirilecekleri açıklanmaktadır. ASP.NET Core 3.1'den .NET 6'ya geçiş yönergeleri için bkz. ASP.NET Core 3.1'den .NET 6'ya geçiş.
Önkoşullar
- Visual Studio 2022 ile ASP.NET ve web geliştirme iş yükü.
- .NET 6 SDK
global.json içindeki .NET SDK sürümünü güncelle.
.NET SDK'nin belirli bir sürümünü hedeflemek için bir global.json
dosyasını kullanıyorsanız, version
özelliğini, yüklü olan .NET 6 SDK sürümüne güncelleştirin. Ö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 bir Microsoft.AspNetCore.*
ve Microsoft.Extensions.*
paket referansının Version
özniteliğini 6.0.0 veya üzeri olarak güncelleyin. Ö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. .NET 6'ya geçiş yapan uygulamaların yeni minimal barındırma modelini kullanması gerekmez. Daha fazla bilgi için aşağıdaki bölümdeki .NET 6'ya geçiş yapan uygulamaların yeni minimal 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
using
deyim satırı sayısını ortadan kaldırmak veya en aza indirmek için genelusing
yönergeleri kullanır.
Aşağıdaki kod, kullanılmayan Startup.cs
deyimleri kaldırılmış bir .NET 5 Web App şablonundaki Program.cs
Sayfalar ve Razor ile using
dosyalarını görüntüler:
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>();
});
}
}
.NET 6'daki ASP.NET Core'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();
.NET 6'daki önceki ASP.NET Core örneğinde aşağıdakiler gösterilmektedir:
-
ConfigureServices ile
WebApplication.Services
değiştirilir. -
builder.Build()
yapılandırılmış bir WebApplication’yiapp
değişkenine döndürür. Configure kullanılarak yapılan yapılandırma çağrıları, aynı hizmetlereapp
ile değiştirilir.
.NET 5 Startup
kodundaki ASP.NET Core'un en düşük barındırma modelini kullanarak .NET 6'ya geçirilmesine ilişkin ayrıntılı örnekler 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ılmayanusing
deyimleri kaldırıldı. -
RequestId
,Error.cshtml
içinde geçerli başvuru türü (NRT) olarak bildirilir:
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
-
appsettings.json
veappsettings.Development.json
içinde 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 "Microsoft": "Warning"
"Microsoft.AspNetCore": "Warning"
olarak değiştirildi. Bu değişiklik Microsoft
ad alanından, dışındaki tüm bilgi iletilerinin günlüğe kaydedilmesine neden olur. Örneğin, Microsoft.EntityFrameworkCore
artık bilgi düzeyinde günlüğe kaydediliyor.
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 veya üzeri sürümlere geçiş yapan uygulamaların yeni minimal barındırma modelini kullanması gerekmez
ASP.NET Core 3.1 ve 5.0 şablonları tarafından kullanılan Startup
ve Genel Ana Bilgisayar kullanımı tamamen desteklenmektedir.
Yeni minimal barındırma modeliyle Başlangıç özelliğini 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:
-
Startup
sınıfı çağrılırken gizli yansıma kullanılmaz. - Geliştirici
Startup
çağrısını denetlediği için zaman uyumsuz kod yazılabilir. -
ConfigureServices
veConfigure
'in aralarına yerleştirilebileceği kod yazılabilir.
Yeni minimal barındırma modeliyle Startup
kodunu kullanmanın küçük bir sınırlaması, bir bağımlılığı Configure
'e enjekte etmek için, Program.cs
içindeki hizmetin elle çö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 .NET 5'teki ASP.NET Core ile .NET 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();
});
}
}
tr-TR: En düşük barındırma modelini kullanırken uç nokta yönlendirme ara yazılımı, tüm ara yazılım işlem hattını kapsar, bu nedenle rotaları kaydetmek için UseRouting
veya UseEndpoints
için açıkça çağrı yapmanıza gerek yoktur.
UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için de kullanılabilir, ancak ara yazılım işlem hattının başında yolların eşleşmesi gerekiyorsa UseRouting
açıkça çağrılması gerekmez.
Aşağıdaki kodda UseRouting
ve UseEndpoints
çağrıları Startup
'den 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
,Startup
sınıfının örneklenmesini ve yaşam döngüsünü denetler. -
Configure
yöntemine eklenen ek hizmetlerin,Program
sınıfı tarafından el ile çözülmesi gerekir.
.NET 5'teki ASP.NET Core ile .NET 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
. WebApplicationBuilder'yi bir kitaplıkta kullanırken, MVC'nin uygulama parçası bulma'sunun çalışmasını sağlamak için uygulama adını açıkça kitaplığın derlemesine 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ı kapsar; bu nedenle
UseRouting
veyaUseEndpoints
ile açıkça yol tanımlamanıza gerek yoktur.UseRouting
yol eşleştirmenin nerede gerçekleşeceğini belirtmek için de kullanılabilir, ancak ara yazılım işlem hattının başında yolların eşleşmesi gerekiyorsaUseRouting
açıkça çağrılması gerekmez. - Herhangi bir çalıştırılmadan önce IStartupFilter oluşturulur; bu nedenle, pipeline oluşturulurken meydana gelen hatalar çağrı zincirinde
IStartupFilter
görünmez. - Bazı araçlar, EF geçişleri gibi,
Program.CreateHostBuilder
kullanarak uygulama bağlamında özel mantık yürütmek amacıyla uygulamanınIServiceProvider
işlevine erişir. 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. - Minimal konak,
Startup
sınıfının aksine, hizmet sağlayıcısını oluştururken 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 IServiceScope ile çağrı yapılması gerekir. Daha fazla bilgi için bkz. Uygulama başlangıcında bir hizmeti çözümleme. - oluşturulduktan sonra uygulama adı, ortam veya içerik kökü gibi konak ayarlarını değiştirmek mümkün . Host ayarlarını değiştirmeye yönelik ayrıntılı yönergeler için Özelleştirme
IHostBuilder
veyaIWebHostBuilder
bölümüne bakın. Aşağıdaki vurgulanmış API'ler istisna fırlatır:
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ı,WebApplicationBuilder.Host
veyaWebApplicationBuilder.WebHost
'den kullanılamaz. Aşağıdaki vurgulanan kod bir hata fırlatır: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 (WebApplicationBuilder) üzerindeki
WebApplicationBuilder.Host
uygulaması, ConfigureServices, ConfigureAppConfiguration veya ConfigureHostConfiguration yöntemlerinin yürütülmesini ertelemez. Yürütmenin ertelenmemesi, WebApplicationBuilder kodununIServiceCollection
veIConfiguration
üzerinde yapılan değişiklikleri gözlemlemesine olanak tanır. Aşağıdaki örnek, yalnızca birService1
olarakIService
ekler: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, builder.Host.ConfigureServices
geri çağırma, builder.Build
çağrılana kadar ertelenmek yerine satır içi olarak çağrılır. Bu, Service1
'nin IServiceCollection
'e Service2
'den önce eklendiği ve bunun Service1
için IService
'ün çözülmesine neden olduğu anlamına gelir.
.NET 6'da ASP.NET Core için kitaplık oluşturma
Mevcut .NET ekosistemi, genişletilebilirliği IServiceCollection, IHostBuilder ve IWebHostBuilder etrafında inşa etmiştir. Bu özellikler WebApplicationBuilder üzerinde Services
, Host
ve WebHost
olarak kullanılabilir.
WebApplication
hem Microsoft.AspNetCore.Builder.IApplicationBuilderhem de Microsoft.AspNetCore.Routing.IEndpointRouteBuilder uygular.
Kitaplık yazarlarının ASP.NET Core'a özgü bileşenler oluştururken IHostBuilder
, IWebHostBuilder
, IApplicationBuilder
ve IEndpointRouteBuilder
hedeflemeye devam etmelerini 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ça 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ş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 veya ü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
net5.0
'dannet6.0
'e değiştirerek .NET 5'ten .NET 6'ya yükseltilebileceğ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
Program
sınıfımdaStartup
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.
Program
sınıfını, durumu depolamak için en üst düzey deyimler tarafından oluşturulan bir sınıf olarak 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ı.
WebApplicationFactory
veTestServer
hala çalışıyor mu?Evet.
WebApplicationFactory<TEntryPoint>
yeni barındırma modelini test etmenin yoludur. Bir örnek için, bkzWebApplicationFactory
veyaTestServer
ile test.
Blazor
Bu makalenin önceki bölümlerinde bir uygulamayı .NET 6'ya güncelleştirme yönergelerini takip ettikten sonra , .NET 6'da ASP.NET Core'daki yenilikler başlığındaki bağlantıları izleyerek belirli özellikleri benimseyin.
Uygulamalar için tüm yeni 6.0 özelliklerini benimsemek için Blazoraş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 .NET 6 özelliklerini benimsemek için değişiklik yaparak uygulamanın bileşenlerini ve kodunu 6.0 uygulamasına taşıyın.
SPA proje taşıma
Angular uygulamalarını SPA uzantılarından geçirme
REACT uygulamalarını SPA uzantılarından geçirme
Bu GitHub sorunundaReact 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. .NET 6 çalışma zamanında ASP.NET Core içeren bir temel görüntü kullanın. .NET 5'teki ASP.NET Core ile .NET 6 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ğindenRazor yararlanıyor. Önceki sürümlerde:
- Derleme, oluşturulan kodu üretmek için
RazorGenerate
veRazorCompile
hedeflerine dayanıyordu. 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. -
AppName.Views.dll
içindeki uygulama türleri kamuya açıktı. .NET 6'da, uygulama türleriAppName.dll
içinde bulunur ancakinternal sealed
şeklindedir.AppName.Views.dll
üzerinde tür keşfi yapan uygulamalarAppName.dll
üzerinde tür keşfi 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.
Önemli
Duende Identity Server, karşılıklı lisans sözleşmesi olan açık kaynaklı bir üründür. Duende Server'ı üretim ortamında kullanmayı planlıyorsanız 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 için Identity kullanmayı öğrenmek için bkz Identity . (dotnet/aspnetcore GitHub deposu).
Güncellenmiş sürüm DbSet<Key>
ile ilgili yeni bir gereksinimi karşılamak için her Keys
öğesine IdentityDbContext
adında bir IPersistedGrantDbContext
özelliği ekleyin. Anahtarlar Duende Identity Server'ın depolarıyla yapılan sözleşmenin bir parçası olarak gereklidir.
public DbSet<Key> Keys { get; set; }
Uyarı
Duende Identity Server için mevcut geçişlerin yeniden oluşturulması gerekir.
.NET 6'da ASP.NET Core'a geçirilen kod örnekleri
6.0 sürümünde yeni minimal barındırma modeline geçirilen kod örnekleri
Önemli 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
- .NET 5 sürümünden .NET 6 sürümüne geçişte işlevselliği etkileyen değişiklikler: ASP.NET Core ve Entity Framework Core'u içerir.
-
Duyurular GitHub deposu (aspnet/Announcements,
6.0.0
label): Önemli ve önemsiz değişiklikleri içerir.
Boş değer atanabilir başvuru türleri (NTS) ve .NET derleyici null durumunun 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 .NET 6 (C# 10) veya sonraki sürümlerinde ASP.NET Core kullanılarak oluşturulan uygulamalar için varsayılan olarak etkinleştirilir.
.NET derleyicisinin null durumu statik analiz uyarıları, bir belge örneğini veya örnek uygulamayı yerel olarak güncellemek için bir kılavuz olarak kullanılabilir ya da yoksayılabilir. Uygulamanın proje dosyasında Nullable
disable
olarak ayarlanarak null durum statik analizi devre dışı bırakılabilir. Ancak bu, derleyici uyarıları .NET hakkında öğrenirken dikkat dağıtıcıysa, yalnızca 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# referansı)
- 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 HostBuilder uygulamasından WebHostBuilder 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