ASP.NET Core 2,1 ' den 2,2 ' e geçiş yapın

Scott Ade tarafından

bu makalede, mevcut bir ASP.NET Core 2,1 projesinin ASP.NET Core 2,2 ' e nasıl güncelleştirilmesi açıklanmaktadır.

Önkoşullar

Uyarı

Visual Studio 2017 kullanıyorsanız, #3124 ile çalışmayan .NET Core SDK hakkında bilgi için dotnet/sdk sorun Visual Studio.

Hedef Framework bilinen adını güncelleştir (tfd)

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

<TargetFramework>netcoreapp2.2</TargetFramework>

.NET Framework hedefleyen projeler, .NET Framework 4.6.1 daha 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 benimseyin

IIS için işlem içi barındırma modelinibenimsemek üzere, <AspNetCoreHostingModel> değerini InProcess Proje dosyasında öğesine değerine ekleyin <PropertyGroup> :

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

işlem içi barındırma modeli, .NET Framework hedefleme ASP.NET Core uygulamalar için desteklenmez.

Daha fazla bilgi için bkz. ASP.NET Core Modülü.

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

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

  • <handlers>ASP.NET Core modülünü () ekleyen girişte name="aspNetCore" modules öznitelik değerini AspNetCoreModule olarak değiştirin AspNetCoreModuleV2 .
  • <aspNetCore>Öğesinde, barındırma modeli özniteliğini ( hostingModel="InProcess" ) ekleyin.

Daha fazla bilgi ve örnek web.config dosya için bkz ASP.NET Core Modülü ..

Paket başvurularını Güncelleştir

.NET Core 'u hedefliyorsanız, proje dosyasındaki metapackage başvurusunun Version özniteliğini kaldırın. Bir özniteliğin eklenmesi Version 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 Microsoft.AspNetCore.App metapackage.

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

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

.NET Framework hedefliyorsanız, her bir paket başvurusunun Version özniteliğini 2.2.0 veya sonraki bir sürüme güncelleştirin. paket başvuruları, tipik bir ASP.NET Core 2,2 projesi hedefleme .NET Framework:

<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şvuruyorsa. Razor .. Tasarım paketi, Version 2.2.0 veya üzeri olarak özniteliğini güncelleştirin. Bunun yapılmaması için aşağıdaki hata oluşur:

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.

global.jsüzerinde .NET Core SDK sürümü Güncelleştir

Çözümünüz belirli bir .NET Core SDK sürümünü hedeflemek için dosyadaki bir global.js kullanıyorsa, version özelliğini makinenizde yüklü 2,2 sürümü olarak güncelleştirin:

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

Başlatma ayarlarını Güncelleştir

Visual Studio Code kullanıyorsanız, projenin başlatma ayarları dosyasını (. vscode/launch.json) güncelleştirin. programYol, yeni tfd '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}"
        }
    ]
}

Güncelleştirme Kestrel yapılandırması

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

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

Uygulama çağırmazsa CreateDefaultBuilder ve Konağı sınıfında el ile oluşturmazsa Program , UseKestrel çağrılmadan önce çağırın ConfigureKestrel :

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. KestrelASP.NET Core'de web sunucusu uygulaması.

Uyumluluk sürümünü Güncelleştir

' Deki uyumluluk sürümünü şu Startup.ConfigureServices şekilde güncelleştirin Version_2_2 :

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

CORS ilkesini Güncelleştir

ASP.NET Core 2,2 ' de, * bir ilke herhangi bir kaynağa izin veriyorsa ve kimlik bilgilerine izin veriyorsa, CORS ara yazılımı () joker noktası ile yanıt verir. Bir joker karakteri () belirtildiğinde kimlik bilgileri desteklenmez * ve TARAYıCıLAR CORS isteğine izin vermez. İstemcideki sorunu düzeltme seçenekleri de dahil olmak üzere daha fazla bilgi için bkz. MDN Web belgeleri.

Sunucuda bu sorunu gidermek için aşağıdaki eylemlerden birini gerçekleştirin:

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

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

Aşağıdaki tabloda Docker Image 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 resim etiketlerini kullanacak şekilde değiştirin.

ııs işlem içi barındırma kullanırken Visual Studio el ile derleme

Visual Studio tarayıcı isteği deneyiminde otomatik derleme , ııs işlem içi barındırma modeliyleçalışmaz. İşlem içi barındırma kullanılırken projeyi el ile yeniden oluşturmanız gerekir. Bu deneyimle ilgili iyileştirmeler, Visual Studio gelecek bir sürümü için planlanmaktadır.

Günlük kodunu Güncelleştir

Önerilen günlük yapılandırma kodu 2,1 ' den 2,2 ' e değişmedi, ancak hala 2,1 ' de çalışılan bazı 1. x kodlama desenleri artık 2,2 sürümünde çalışmıyor.

Uygulamanız sınıfında sağlayıcı başlatma, filtreleme ve yapılandırma yüklemeyi günlüğe kaydetmeye çalışıyorsa Startup , bu kodu şu şekilde taşıyın Program.Main :

  • Sağlayıcı başlatma:

    1. x örneği:
    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
    }
    

    2,2 örnek:

    
    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 örnek:

    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ükleniyor:

    1. x örneği:
    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration);
    }
    

    2,2 örnek:

    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 günlük.

Ek kaynaklar