Aracılığıyla paylaş


.NET 5'te ASP.NET Core'dan .NET 6'ya geçiş

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

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.0gü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 ve Program.cs öğesini tek Program.cs bir dosyada birleştirir.
  • Bir uygulama için gereken kodu en aza indirmek için üst düzey deyimleri kullanır.
  • Gerekli usingdeyim satırı sayısını ortadan kaldırmak veya en aza indirmek için genel using 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:

.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 ve Privacy.cshtml kullanılmayan using 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 ve appsettings.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 ve Configure'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 veya UseEndpoints 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 gerekiyorsa UseRouting 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ın IServiceProvider 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ılan Program.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 veya IWebHostBuilder 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 veya WebApplicationBuilder.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 kodunun IServiceCollection ve IConfiguration üzerinde yapılan değişiklikleri gözlemlemesine olanak tanır. Aşağıdaki örnek, yalnızca bir Service1 olarak IService 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.

WebApplicationhem 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ğerdir IWebHostBuilder. üzerinde IHostBuilderbelirli 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'dan net6.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ımda Startup 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 ve TestServer hala çalışıyor mu?

    Evet. WebApplicationFactory<TEntryPoint> yeni barındırma modelini test etmenin yoludur. Bir örnek için, bkz WebApplicationFactory veya TestServer 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

Bu GitHub sorununa bakın

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 ve RazorCompile 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.dlloluş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 derleme AppName.dll oluşturulur.
  • AppName.Views.dll içindeki uygulama türleri kamuya açıktı. .NET 6'da, uygulama türleri AppName.dll içinde bulunur ancak internal sealed şeklindedir. AppName.Views.dll üzerinde tür keşfi yapan uygulamalar AppName.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:

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 Nullabledisable 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:

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