ASP.NET Core 1.x'den 2.0'a geçiş
Scott Addie tarafından
Bu makalede, mevcut bir ASP.NET Core 1.x projesini 2.0'a ASP.NET Core adım adım açıklanmıştır. Uygulamanızı 2.0 ASP.NET Core 2.0'a almak, birçok yeni özellik ve performans geliştirmelerinden yararlanmanızı sağlar.
Mevcut ASP.NET Core 1.x uygulamaları sürüme özgü proje şablonlarını temel almaktadır. Temel ASP.NET Core geliştikçe proje şablonları ve içinde yer alan başlangıç kodu da gelişir. ASP.NET Core çerçevesini güncelleştirmeye ek olarak, uygulama kodunu da güncelleştirmeniz gerekir.
Önkoşullar
Bkz. Başlarken ile ASP.NET Core.
Hedef Çerçeve Bilinen Adı (TFM) Güncelleştirildi
.NET Core'a yönelik projeler, .NET Core 2.0'a eşit veya daha büyük bir sürümün TFM'sini kullandır. <TargetFramework> .csproj dosyasında düğümü bulun ve iç metnini ile netcoreapp2.0 değiştirin:
<TargetFramework>netcoreapp2.0</TargetFramework>
4.6.1 .NET Framework'den büyük veya bu sürüme eşit bir sürümün TFM'lerini .NET Framework projelerin TFM'lerini kullanmaları gerekir. <TargetFramework> .csproj dosyasında düğümü bulun ve iç metnini ile net461 değiştirin:
<TargetFramework>net461</TargetFramework>
Not
.NET Core 2.0, .NET Core 1.x'e göre çok daha büyük bir yüzey alanı sunar. .NET Core 1.x.NET Framework de eksik API'ler nedeniyle bu api'leri hedefleiyorsanız, .NET Core 2.0'ı hedeflemek büyük olasılıkla çalışır.
Proje dosyası <RuntimeFrameworkVersion>1.{sub-version}</RuntimeFrameworkVersion> içeriyorsa, bu soruna GitHub bakın.
.NET Core SDK sürümünde global.jsgüncelleştirme
Çözümünüz belirli bir global.js sürümünü hedeflemek için bir dosya üzerinde .NET Core SDK kullanıyorsa, makinenize yüklenmiş 2.0 sürümünü kullanmak için özelliğini version güncelleştirin:
{
"sdk": {
"version": "2.0.0"
}
}
Paket başvurularını güncelleştirme
Bir 1.x projesinde .csproj dosyası, proje tarafından NuGet pakete göre her bir dosyayı listeler.
.NET Core 2.0'ı ASP.NET Core 2.0 projesinde, .csproj dosyasındaki tek bir meta paket başvurusu paket koleksiyonunun yerini almaktadır:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
</ItemGroup>
ASP.NET Core 2.0 ve Entity Framework Core 2.0'ın tüm özellikleri meta veri paketine dahil edilir.
ASP.NET Core 2.0 projelerini .NET Framework tek tek NuGet devam edecektir. Her Version düğümün özniteliğini <PackageReference /> 2.0.0 olarak güncelleştirin.
Örneğin, tipik bir ASP.NET Core 2.0 projesinde kullanılan düğümlerin listesi aşağıdaki gibi <PackageReference /> .NET Framework:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" />
</ItemGroup>
Güncelleştirme .NET Core CLI araçları
.csproj dosyasında her düğümün Version özniteliğini <DotNetCliToolReference /> 2.0.0 olarak güncelleştirin.
Örneğin, .NET Core 2.0'a yönelik tipik ASP.NET Core 2.0 projesinde kullanılan CLI araçlarının listesi:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
Paket Hedefi Geri Dönüş özelliğini yeniden adlandırma
1.x projesinin .csproj dosyası bir düğüm PackageTargetFallback ve değişken kullandı:
<PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
Hem düğümü hem de değişkeni olarak yeniden AssetTargetFallback adlandırarak:
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
Program.cs'de Update Main yöntemi
1.x projelerinde Main Program.cs yöntemi şöyle görünüyor:
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace AspNetCoreDotNetCore1App
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}
}
}
2.0 projelerinde Main Program.cs yöntemi basitleştirildi:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace AspNetCoreDotNetCore2App
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
Bu yeni 2.0 deseninin benimsenmesi kesinlikle önerilir ve Entity Framework (EF) Çekirdek Geçişleri gibi ürün özelliklerinin çalışması için gereklidir. Örneğin, Paket Yöneticisi Konsolu penceresinden veya komut satırı Update-Database dotnet ef database update (ASP.NET Core 2.0'a dönüştürülen projelerde) çalıştırarak aşağıdaki hata oluşturulur:
Unable to create an object of type '<Context>'. Add an implementation of 'IDesignTimeDbContextFactory<Context>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.
Yapılandırma sağlayıcıları ekleme
1.x projelerinde, bir uygulamaya yapılandırma sağlayıcıları ekleme, oluşturucu aracılığıyla Startup tamamlandı. Adımları bir örneği ConfigurationBuilder oluşturma, ilgili sağlayıcıları yükleme (ortam değişkenleri, uygulama ayarları vb.) ve üyesini başlatmayı IConfigurationRoot içerir.
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets<Startup>();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
Yukarıdaki örnek, üyeyi hem yapılandırma ayarlarıyla hem de tüm Configuration uygulama appsettings.json ayarlarıyla yükler. <EnvironmentName> . özelliğiyle eşleşen json IHostingEnvironment.EnvironmentName dosyası. Bu dosyaların konumu Startup.cs ile aynı yoldadır.
2.0 projelerinde, 1.x projelerinin yapısına sahip ortak yapılandırma kodu arkasını çalıştırır. Örneğin, ortam değişkenleri ve uygulama ayarları başlangıçta yüklenir. Eşdeğer Startup.cs kodu, ekleme IConfiguration örneğiyle başlatmaya indir indirildi:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
tarafından eklenen varsayılan sağlayıcıları kaldırmak için WebHostBuilder.CreateDefaultBuilder içindeki Clear IConfigurationBuilder.Sources özelliğinde yöntemini ConfigureAppConfiguration çağırır. Sağlayıcıları geri eklemek için ConfigureAppConfiguration Program.cs'de yöntemini kullanın:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((hostContext, config) =>
{
// delete all default configuration providers
config.Sources.Clear();
config.AddJsonFile("myconfig.json", optional: true);
})
.Build();
Yukarıdaki kod parçacığında CreateDefaultBuilder yöntemi tarafından kullanılan yapılandırma burada görülebilir.
Daha fazla bilgi için bkz. ASP.NET Core.
Veritabanı başlatma kodunu taşıma
EF Core 1.x kullanan 1.x projelerinde, gibi dotnet ef migrations add bir komut şunları yapar:
- Örnek örneği
Startupörneği - Bağımlılık ekleme ile tüm hizmetleri kaydetmek için yöntemini çağırır
ConfigureServices(türlerDbContextdahil) - Gerekli görevlerini gerçekleştirir
EF Core 2.0 kullanan 2.0 projelerinde, Program.BuildWebHost uygulama hizmetlerini almak için çağrılır. 1.x'den farklı olarak, bu, 'nin de ek yan etkisine Startup.Configure sahiptir. 1.x uygulamanıza yönteminde veritabanı başlatma kodu çağrıldığında Configure beklenmeyen sorunlar oluşabilir. Örneğin, veritabanı henüz yoksa, çekirdek oluşturma kodu Geçişler komut yürütme EF Core önce çalışır. Bu sorun, dotnet ef migrations list veritabanı henüz yoksa komutun başarısız olmasına neden olur.
Startup.cs yönteminde aşağıdaki 1.x çekirdek Configure başlatma kodunu göz önünde bulundurabilirsiniz:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
SeedData.Initialize(app.ApplicationServices);
2.0 projelerinde SeedData.Initialize çağrıyı Main Program.cs yöntemine taşıma:
var host = BuildWebHost(args);
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
// Requires using RazorPagesMovie.Models;
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
2.0'dan sonra web ana bilgisayarı derleme ve yapılandırma dışında herhangi bir BuildWebHost şey yapmak kötü bir uygulamadır. Uygulamayı çalıştırmayla ilgili her şey BuildWebHost — Main genellikle Program.cs yönteminin dışında iş gerekir.
Derlemeyi Razor görüntüle ayarını gözden geçirme
Daha hızlı uygulama başlatma süresi ve daha küçük yayımlanan paketler sizin için çok önemlidir. Bu nedenlerle, görünüm Razor derlemesi 2.0'ASP.NET Core varsayılan olarak etkindir.
Özelliğini MvcRazorCompileOnPublish true olarak ayarlama artık gerekli değildir. Görünüm derlemesini devre dışı bırakamıyorsanız özelliği .csproj dosyasından kaldırılabilir.
Bu .NET Framework microsoft.AspNetCore.Mvc. uygulamasına açıkça başvurulması Razor gerekir. ViewCompilation NuGet .csproj dosyanıza paket olarak kaydedin:
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />
Application Analizler "light-up" özelliklerine güvenin
Uygulama performansı ölçümlerinin zahmetsiz bir şekilde kurulumu önemlidir. Artık yeni Application Analizler 2017 araçlarında bulunan "Visual Studio" özelliklerine güvenebilirsiniz.
ASP.NET Core 2017'de oluşturulan 1.1 Visual Studio, varsayılan olarak Application Analizler ekledi. Application Analizler SDK'sı'Analizler Program.cs ve Startup.cs dışında kullanıyorsanız şu adımları izleyin:
.NET Core hedeflense,
<PackageReference />.csproj dosyasından aşağıdaki düğümü kaldırın:<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" />.NET Core'a
UseApplicationInsightsyönelikse, Program.cs'den uzantı yöntemi çağrılarını kaldırın:public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .UseApplicationInsights() .Build(); host.Run(); }application _Layout.cshtml'den application Analizler api çağrısını kaldırın. Aşağıdaki iki kod satırı içerir:
@inject Microsoft.ApplicationInsights.AspNetCore.JavaScriptSnippet JavaScriptSnippet @Html.Raw(JavaScriptSnippet.FullScript)
Application Analizler SDK'sı kullanıyorsanız, devam edin. 2.0 meta paketi, Application Analizler'nin en son sürümünü içerir, dolayısıyla eski bir sürüme başvurursanız paket eski sürüme düşürme hatası görüntülenir.
Kimlik doğrulamayı benimseme/ Identity geliştirmeler
ASP.NET Core 2.0'da yeni bir kimlik doğrulama modeli ve üzerinde bir dizi önemli değişiklik ASP.NET Core Identity vardır. Projenizi Bireysel Kullanıcı Hesapları etkinleştirilmiş olarak oluşturduysanız veya kimlik doğrulamasını el ile eklediysanız bkz. Kimlik Doğrulamayı Geçirme ve Identity Identity 2.0'a ASP.NET Core.