Aracılığıyla paylaş


ASP.NET Core 2.1'den 2.2'ye geçiş

Yayınlayan Scott Addie

Bu makalede, mevcut bir ASP.NET Core 2.1 projesinin ASP.NET Core 2.2'ye nasıl güncelleştirilecekleri açıklanmaktadır.

Önkoşullar

Uyarı

Visual Studio 2017 kullanıyorsanız Visual Studio ile çalışmayan .NET Core SDK sürümleri hakkında bilgi için bkz . dotnet/sdk sorunu #3124 .

Hedef Çerçeve Bilinen Adını (TFM) Güncelleştirme

.NET Core'ı hedefleyen projeler ,NET Core 2.2'den büyük veya buna eşit bir sürümün TFM'sini kullanmalıdır. Proje dosyasında düğümün <TargetFramework> iç metnini ile netcoreapp2.2güncelleştirin:

<TargetFramework>netcoreapp2.2</TargetFramework>

.NET Framework'e yönelik projeler ,NET Framework 4.6.1'den büyük veya buna eşit bir sürümün TFM'sini kullanmaya devam edebilir:

<TargetFramework>net461</TargetFramework>

IIS işlem içi barındırma modelini benimseme

IIS için işlem içi barındırma modelini benimsemek için proje dosyasında değerine sahip InProcess <PropertyGroup> özelliğini ekleyin<AspNetCoreHostingModel>:

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

.NET Framework'ün hedeflendiği ASP.NET Core uygulamaları için işlem içi barındırma modeli desteklenmez.

Daha fazla bilgi için bkz. IIS için ASP.NET Core Modülü (ANCM).

Özel bir web.config dosyasını güncelleştirme

Yayımlanmış web.config dosyasını oluşturmak üzere proje kökünde özel bir web.config dosyası kullanan projeler için:

  • <handlers> ASP.NET Çekirdek Modülünü ()name="aspNetCore" ekleyen girdidemodules, özniteliği değerini olarak AspNetCoreModule AspNetCoreModuleV2değiştirin.
  • <aspNetCore> öğesine barındırma modeli özniteliğini (hostingModel="InProcess") ekleyin.

Daha fazla bilgi ve örnek web.config dosyaları için bkz . IIS için ASP.NET Çekirdek Modülü (ANCM).

Paket başvurularını güncelleştirme

.NET Core hedefleniyorsa, proje dosyasında meta paket başvurusunun Version özniteliğini kaldırın. Bir Version özniteliğin eklenmesi aşağıdaki uyarıya neden olur:

A PackageReference to 'Microsoft.AspNetCore.App' specified a Version of `2.2.0`. Specifying the version of this package is not recommended. For more information, see https://aka.ms/sdkimplicitrefs

Daha fazla bilgi için bkz . ASP.NET Core için meta paket Microsoft.AspNetCore.App.

Meta paket başvurusu aşağıdaki <PackageReference /> düğüme benzemelidir:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

.NET Framework hedefleniyorsa, her paket başvurusu özniteliğini Version 2.2.0 veya sonraki bir sürüme güncelleştirin. .NET Framework'i hedefleyen tipik bir ASP.NET Core 2.2 projesindeki paket başvuruları şunlardır:

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
  <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
</ItemGroup>

Microsoft.AspNetCore'a başvuruyorsanız .Razor. Tasarım paketi, özniteliğini Version 2.2.0 veya sonraki bir sürüme güncelleştirin. Bunun yapılmaması aşağıdaki hatayla sonuçlanır:

Detected package downgrade: Microsoft.AspNetCore.Razor.Design from 2.2.0 to 2.1.2. Reference the package directly from the project to select a different version.

içinde .NET Core SDK sürümünü güncelleştirme global.json

Çözümünüz belirli bir .NET Core SDK sürümünü hedeflemek için bir global.json dosya kullanıyorsa, özelliğini makinenizde yüklü olan 2.2 sürümüne güncelleştirin version :

{
  "sdk": {
    "version": "2.2.100"
  }
}

Başlatma ayarlarını güncelleştirme

Visual Studio Code kullanıyorsanız projenin başlatma ayarları dosyasını (.vscode/launch.json ) güncelleştirin. Yol program yeni TFM'ye başvurmalıdır:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/netcoreapp2.2/test-app.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": {
                "enabled": true,
                "args": "${auto-detect-url}",
                "windows": {
                    "command": "cmd.exe",
                    "args": "/C start ${auto-detect-url}"
                },
                "osx": {
                    "command": "open"
                },
                "linux": {
                    "command": "xdg-open"
                }
            },
            "env": {
                "ASPNETCORE_ENVIRONMENT": "Development"
            },
            "sourceFileMap": {
                "/Views": "${workspaceFolder}/Views"
            }
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        }
    ]
}

Yapılandırmayı güncelleştirme Kestrel

Uygulama, sınıfın CreateWebHostBuilder yönteminde Program çağırarak CreateDefaultBuilder çağırırsaUseKestrel, IIS işlem içi barındırma modeliyle çakışmaları önlemek için yerine sunucuyu UseKestrel yapılandırma Kestrel çağrısı ConfigureKestrel yapın:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureKestrel((context, options) =>
        {
            // Set properties and call methods on options
        });

Uygulama çağrı CreateDefaultBuilder yapmıyorsa ve konağı sınıfında el ile Program oluşturuyorsa çağrısından önce çağrısı UseKestrel ConfigureKestrelyapın:

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseKestrel()
        .UseIISIntegration()
        .UseStartup<Startup>()
        .ConfigureKestrel((context, options) =>
        {
            // Set properties and call methods on options
        })
        .Build();

    host.Run();
}

Daha fazla bilgi için bkz Kestrel . ASP.NET Core'da web sunucusu.

Uyumluluk sürümünü güncelleştirme

içindeki Startup.ConfigureServices uyumluluk sürümünü ile Version_2_2güncelleştirin:

services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

CORS ilkesini güncelleştirme

ASP.NET Core 2.2'de, bir ilke herhangi bir kaynak için izin veriyorsa ve kimlik bilgilerine izin veriyorsa CORS ara yazılımı joker karakter kaynağıyla (*) yanıt verir. Joker karakter kaynağı (*) belirtildiğinde kimlik bilgileri desteklenmez ve tarayıcılar CORS isteğine izin vermeyecektir. İstemcideki sorunu düzeltme seçenekleri de dahil olmak üzere daha fazla bilgi için bkz . MDN web belgeleri.

Sunucudaki bu sorunu düzeltmek için aşağıdaki eylemlerden birini gerçekleştirin:

  • CORS ilkesini artık kimlik bilgilerine izin vermeyecek şekilde değiştirin. Yani, ilkeyi yapılandırırken çağrısı AllowCredentials kaldırın.
  • CORS isteğinin başarılı olması için kimlik bilgileri gerekiyorsa, ilkeyi izin verilen konakları belirtecek şekilde değiştirin. Örneğin, yerine kullanın builder.WithOrigins("https://api.example1.com", "https://example2.com") AllowAnyOrigin.

Docker görüntülerini güncelleştirme

Aşağıdaki tabloda Docker görüntü etiketi değişiklikleri gösterilmektedir:

2.1 2.2
microsoft/dotnet:2.1-aspnetcore-runtime mcr.microsoft.com/dotnet/core/aspnet:2.2
microsoft/dotnet:2.1-sdk mcr.microsoft.com/dotnet/core/sdk:2.2

FROM Dockerfile dosyanızdaki satırları, önceki tablonun 2.2 sütunundaki yeni görüntü etiketlerini kullanacak şekilde değiştirin.

İŞLEM içi IIS barındırma kullanırken Visual Studio'da el ile derleme

Visual Studio'nun Tarayıcı üzerinde otomatik derleme isteği deneyimi, IIS işlem içi barındırma modeliyle çalışmaz. İşlem içi barındırma kullanırken projeyi el ile yeniden oluşturmanız gerekir. Visual Studio'nun gelecek bir sürümü için bu deneyimde iyileştirmeler yapılması planlanıyor.

Günlük kodunu güncelleştirme

Önerilen günlük yapılandırma kodu 2.1'den 2.2'ye değişmedi, ancak 2.1'de çalışmaya devam eden bazı 1.x kodlama desenleri artık 2.2'de çalışmıyor.

Uygulamanız sınıfta sağlayıcı başlatma, filtreleme ve yapılandırma yükleme Startup işlemine günlüğe kaydetme işlemi yapıyorsa, bu kodu öğesine Program.Maintaşıyın:

  • Sağlayıcı başlatma:

    1.x örneği:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
    }
    

    2.2 örneği:

    
    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole();
            })
            // ...
    }
    
  • Filtreleme:

    1.x örneği:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(LogLevel.Information);
        // or
        loggerFactory.AddConsole((category, level) => 
            category == "A" || level == LogLevel.Critical);
    }
    

    2.2 örneği:

    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConsole()
                       .AddFilter<ConsoleLoggerProvider>
                           (category: null, level: LogLevel.Information)
                       // or
                       .AddFilter<ConsoleLoggerProvider>
                           ((category, level) => category == "A" ||
                               level == LogLevel.Critical)
                );
            })
            // ...
    }
    
  • Yapılandırma yüklemesi:

    1.x örneği:

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration);
    }
    

    2.2 örneği:

    public static void Main(string[] args)
    {
        var webHost = new WebHostBuilder()
            // ...
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddConsole();
            })
            // ...
    }
    

Daha fazla bilgi için bkz . .NET Core ve ASP.NET Core'da oturum açma

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.

Ek kaynaklar