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

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.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 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 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 deyim satırı sayısını using ortadan kaldırmak veya en aza indirmek için genel using 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:

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 ve Privacy.cshtml kullanılmayan deyimlerinin kaldırılmasını using sağlayın.
  • RequestIdin Error.cshtml null atanabilir başvuru türü (NRT) olarak bildirilir:
- public string RequestId { get; set; }
+ public string? RequestId { get; set; }
  • ve appsettings.Development.jsoniçinde appsettings.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ışındakiMicrosoft.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

Startupve 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ı Startupdenetlediğinden zaman uyumsuz kod yazılabilir.
  • ve Configurearalarına yerleşebilen ConfigureServices 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 Configureeklemek 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 Startupkaldı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ından Program 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 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.
  • İş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ılan Program.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 veya IWebHostBuilder. 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ı veya WebApplicationBuilder.WebHostöğesinden WebApplicationBuilder.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 WebApplicationBuilderWebApplicationBuilder.Hostuygulaması , ConfigureAppConfigurationveya ConfigureHostConfiguration yöntemlerinin yürütülmesini ConfigureServicesertelemez. Yürütmenin ertelenmemesi, ve IConfigurationüzerinde yapılan değişiklikleri gözlemlemek için kullanarak WebApplicationBuilder kod kullanılmasına IServiceCollection izin verir. Aşağıdaki örnek yalnızca olarak IServiceeklerService1:

    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 IServiceCollectionService2 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 , Hostve WebHostolarak Serviceskullanılabilir.

WebApplicationhem 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, IApplicationBuilderve IEndpointRouteBuilder hedeflerini oluşturmaya IHostBuilderdevam 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ğ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 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'ya net6.0yü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ımda Program 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. veya TestServerile WebApplicationFactory 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

Bu GitHub sorununa bakın

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 DockerfileFROM 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 ON olarak ayarlanmıştırJS.

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 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.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.
  • içindeki AppName.Views.dll uygulama türleri geneldi. .NET 6'da, uygulama türleri içindedir AppName.dll ancak şeklindedir internal sealed. Üzerinde tür bulma AppName.Views.dll işlemi yapan uygulamalar üzerinde AppName.dlltü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 Identity. Server4 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 IPersistedGrantDbContextyeni 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:

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

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