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.2
gü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 olarakAspNetCoreModule
AspNetCoreModuleV2
değ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 ConfigureKestrel
yapı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_2
gü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.Main
taşı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
ASP.NET Core