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

Gönderen Rick Anderson

ASP.NET Core 2,1 ' deki yeni özelliklere genel bakış için bkz. ASP.NET Core 2,1 ' deki yenilikler.

Bu makalede:

  • ASP.NET Core 2,0 uygulamasını 2,1 ' ye geçirmeye ilişkin temel bilgileri içerir.
  • ASP.NET Core web uygulaması şablonlarındaki değişikliklere genel bir bakış sağlar.

2,1 sürümündeki değişikliklere genel bakış almanın hızlı bir yolu şu şekilde yapılır:

  • WebApp1 adlı bir ASP.NET Core 2,0 web uygulaması oluşturun.
  • Kaynak denetim sistemine WebApp1 yürütün.
  • WebApp1 öğesini silin ve aynı yerde WebApp1 adlı bir ASP.NET Core 2,1 web uygulaması oluşturun.
  • 2,1 sürümündeki değişiklikleri gözden geçirin.

bu makalede ASP.NET Core 2,1 ' e geçiş hakkında bir genel bakış sunulmaktadır. Sürüm 2,1 ' e geçmek için gereken tüm değişikliklerin tamamını içermez. Bazı projeler, proje oluşturulduğunda ve projede yapılan değişiklikler için seçilen seçeneklere bağlı olarak daha fazla adım gerektirebilir.

Proje dosyasını 2,1 sürüm kullanacak şekilde Güncelleştir

Proje dosyasını güncelleştirin:

  • Proje dosyasını olarak güncelleştirerek hedef Framework 'ü .NET Core 2,1 olarak değiştirin <TargetFramework>netcoreapp2.1</TargetFramework> .
  • İçin paket başvurusunu için Microsoft.AspNetCore.All bir paket başvurusuyla değiştirin Microsoft.AspNetCore.App . Öğesinden kaldırılan bağımlılıkları eklemeniz gerekebilir Microsoft.AspNetCore.All . Daha fazla bilgi için ASP.NET Core 2,0 için Microsoft. AspNetCore. All metapackage ve ASP.NET Core için Microsoft.AspNetCore.App metapackage bölümlerine bakın.
  • Paket başvurusunda "Version" özniteliğini kaldırın Microsoft.AspNetCore.App . Kullanan projelerin <Project Sdk="Microsoft.NET.Sdk.Web"> sürümü ayarlaması gerekmez. sürüm, hedef framework tarafından kapsanıyor ve ASP.NET Core 2,1 ' i en iyi şekilde eşleşecek şekilde seçilidir. Daha fazla bilgi için bkz. paylaşılan Framework 'ü hedefleyen projeler Için kurallar bölümü.
  • .NET Framework hedefleyen uygulamalar için her paket başvurusunu 2,1 olarak güncelleştirin.
  • Aşağıdaki paketler için < dotnetclitoolreference > öğelerine başvuruları kaldırın. Bu araçlar, .NET Core CLI varsayılan olarak paketlenmiştir ve ayrıca yüklenmesi gerekmez.
    • Microsoft. DotNet. Izleyici. Tools ( dotnet watch )
    • Microsoft. EntityFrameworkCore. Tools. DotNet ( dotnet ef )
    • Microsoft. Extensions. Önbelleğe Alma. SqlConfig. Tools ( dotnet sql-cache )
    • Microsoft. Extensions. SecretManager. Tools ( dotnet user-secrets )
  • İsteğe bağlı: için < > dotnetclitoolreference öğesini kaldırabilirsiniz Microsoft.VisualStudio.Web.CodeGeneration.Tools . Bu aracı çalıştırarak, küresel olarak yüklenen bir sürümle değiştirebilirsiniz dotnet tool install -g dotnet-aspnet-codegenerator .
  • 2,1 için, bir Razor sınıf kitaplığı dosyaları dağıtmaya yönelik önerilen çözümdür Razor . Uygulamanız katıştırılmış görünümler kullanıyorsa veya dosya çalışma zamanı derlemesini temel alıyorsa, Razor <CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory> <PropertyGroup> proje dosyanızdaki öğesine ekleyin.

Aşağıdaki biçimlendirmede, şablon tarafından oluşturulan 2,0 proje dosyası gösterilmektedir:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" PrivateAssets="All" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3" />
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.2" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
  </ItemGroup>
</Project>

Aşağıdaki biçimlendirmede, şablon tarafından oluşturulan 2,1 proje dosyası gösterilmektedir:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.1" PrivateAssets="All" />
  </ItemGroup>

</Project>

Paylaşılan çerçeveyi hedefleyen projeler için kurallar

Paylaşılan bir çerçeve , uygulamanın klasörlerinde olmayan bir derleme (.dll dosyaları) kümesidir. Uygulamayı çalıştırmak için makinede paylaşılan çerçeve yüklü olmalıdır. Daha fazla bilgi için bkz. paylaşılan çerçeve.

ASP.NET Core 2,1 aşağıdaki paylaşılan çerçeveleri içerir:

Paket başvurusu tarafından belirtilen sürüm, gereken en düşük sürümdür. Örneğin, bu paketlerin 2.1.1 sürümlerine başvuran bir proje yalnızca 2.1.0 çalışma zamanının yüklü olduğu bir makinede çalışmaz.

Paylaşılan bir çerçeveyi hedefleyen projeler için bilinen sorunlar:

  • .net Core 2.1.300 SDK (ilk Visual Studio 15,6), Microsoft.AspNetCore.App Entity Framework Core 2.1.1 ile çakışmaya neden olan örtük 2.1.0 sürümüne ayarlayın. Önerilen çözüm, .NET Core SDK 2.1.301 veya üzeri sürümüne yükseltilmedir. Daha fazla bilgi için bkz. Microsoft.AspNetCore.App ile bağımlılıkları paylaşan paketler, düzeltme eki sürümlerine başvuramaz.

  • Microsoft.AspNetCore.All Microsoft.AspNetCore.App Veya kullanan başka bir projeye bir proje başvurusu içerse bile, kullanması gereken veya proje dosyasındaki paket için bir paket başvurusu eklemesi gereken tüm projeler Microsoft.AspNetCore.All Microsoft.AspNetCore.App .

    Örnek:

    • MyApp öğesine bir paket başvurusu içerir Microsoft.AspNetCore.App .
    • MyApp.Tests öğesine bir proje başvurusu içerir MyApp.csproj .

    İçin bir paket başvurusu ekleyin Microsoft.AspNetCore.App MyApp.Tests . Daha fazla bilgi için bkz. Integration Testing 'in ayarlanması ve paylaşılan çerçeve bakımını yapmak zor olabilir.

2,1 Docker görüntülerine güncelleştirme

ASP.NET Core 2,1 ' de, docker görüntüleri dotnet/dotnet-docker GitHub deposunageçirilir. Aşağıdaki tabloda Docker görüntüsü ve etiket değişiklikleri gösterilmektedir:

2.0 2.1
Microsoft/aspnetcore: 2.0 microsoft/dotnet:2.1-aspnetcore-runtime
Microsoft/aspnetcore-Build: 2.0 microsoft/dotnet:2.1-sdk

FROM Dockerfile dosyanızdaki satırları, önceki tablonun 2,1 sütunundaki yeni görüntü adlarını ve etiketlerini kullanacak şekilde değiştirin. Daha fazla bilgi için bkz. aspnetcore Docker depolarından DotNet 'e geçiş.

Ana değişikliklerle yapılan değişiklikler

Aşağıdaki resimlerde, şablonlu oluşturulan program. cs dosyasında yapılan değişiklikler gösterilmektedir.

eski sürüm farklılıkları

Yukarıdaki görüntüde, silme işlemleri kırmızı olan 2,0 sürümü gösterilmektedir.

Aşağıdaki görüntüde 2,1 kodu gösterilmektedir. Yeşil içindeki kod 2,0 sürümü ile değiştirilmiştir:

Yeni sürüm farklılıkları

Aşağıdaki kod, program. cs' nin 2,1 sürümünü göstermektedir:

namespace WebApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
}

Yeni, Main çağrısını BuildWebHost Createwebhostbuilderile değiştirir. Yeni bir tümleştirme test altyapısınıdesteklemek Için ıwebhostbuilder eklenmiştir.

Başlangıçtaki değişiklikler

Aşağıdaki kod, 2,1 şablonu tarafından üretilen koddaki değişiklikleri gösterir. Tüm değişiklikler, kaldırılmış olması dışında yeni eklenen koddur UseBrowserLink :

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace WebApp1
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });


            services.AddMvc()
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            // If the app uses Session or TempData based on Session:
            // app.UseSession();

            app.UseMvc();
        }
    }
}

Yukarıdaki kod değişiklikleri ayrıntılı olarak açıklanmıştır:

Kimlik doğrulama kodundaki değişiklikler

ASP.NET Core 2,1, ASP.NET Core Identity bir Razor sınıf kitaplığı (rcl) olarak sunulmaktadır.

Varsayılan 2,1 Identity Kullanıcı arabirimi şu anda 2,0 sürümü üzerinde önemli yeni özellikler sağlamıyor. IdentityRCL paketiyle değiştirme isteğe bağlıdır. Şablon Identity tarafından üretilen kodu RCL sürümü ile değiştirme avantajları şunlardır:

  • Kaynak ağacınızdaki pek çok dosya taşınır.
  • Tüm hata düzeltmeleri veya yeni özellikler Identity Microsoft.AspNetCore.app metapackageiçinde yer alır. Güncellendiği zaman otomatik olarak Identity güncelleştirilir Microsoft.AspNetCore.App .

Şablon tarafından üretilen kodda önemsiz olmayan değişiklikler yaptıysanız Identity :

  • Önceki avantajlar büyük olasılıkla RCL sürümüne dönüştürmeyi değiştirmez .
  • ASP.NET Core 2,0 kodunuzun kalmasını sağlayabilirsiniz Identity . bu, tam olarak desteklenmektedir.

Identity 2,1, alanı ile uç noktaları kullanıma sunar Identity . Örneğin, takip tablosu Identity 2,0 ile 2,1 arasında değişen uç nokta örneklerini gösterir:

2,0 URL 'SI 2,1 URL 'SI
/Account/Login /Identity/Account/Login
/Account/Logout /Identity/Account/Logout
/Account/Manage /Identity/Account/Manage

Identity2,0 kullanan ve değiştirme Identity Kullanıcı arabirimini içeren uygulamaların, 2,1 kitaplığı ile aynı Identity URL 'leri dikkate almanız gerekir Identity /Identity . Yeni uç noktaları işlemenin bir yolu Identity , örneğin ' dan ' a kadar yeniden yönlendirmeleri ayarlamaya /Account/Login yöneliktir /Identity/Account/Login .

Identity2,1 sürümüne Güncelleştir

2,1 güncelleştirmesi için aşağıdaki seçenekler kullanılabilir Identity .

  • IdentityKullanıcı arabirimi 2,0 kodunu hiçbir değişiklik olmadan kullanın. IdentityUı 2,0 kodunun kullanılması tam olarak desteklenmektedir. Oluşturulan kodda önemli değişiklikler yapıldığında bu iyi bir yaklaşımdır Identity .
  • Mevcut Identity 2,0 kodunuzu silin ve projenize Scafkatın Identity . Projeniz ASP.NET Core Identity Razor sınıf kitaplığınıkullanacaktır. Değiştirdiğiniz Kullanıcı arabirimi kodu için kod ve Kullanıcı arabirimi oluşturabilirsiniz Identity . Kod değişikliklerinizi yeni scafkatka koduna uygulayın.
  • Var olan Identity 2,0 kodunuzu silin ve tüm dosyaları geçersiz kılma seçeneğiyle projenize scafkatın Identity .

Identity2,0 arabirimini Identity 2,1 Razor sınıf kitaplığıyla değiştirme

bu bölümde, ASP.NET Core 2,0 şablonu Identity tarafından oluşturulan kodu ASP.NET Core Identity Razor sınıf kitaplığıyladeğiştirme adımları özetlenmektedir. Aşağıdaki adımlar bir Razor Sayfalar projesine yöneliktir, ancak BIR MVC projesi yaklaşımı benzerdir.

  • Proje dosyasının 2,1 sürümleri kullanacak şekilde güncelleştirildiğini doğrulayın
  • Aşağıdaki klasörleri ve içerdikleri tüm dosyaları silin:
    • Denetleyiciler
    • Sayfa/hesap/
    • Uzantıları
  • Projeyi derleyin.
  • Yapı Identity İskelesi projenize:
    • _ Layout. cshtml dosyasından çıkış projelerini seçin.
    • + Veri bağlam sınıfının sağ tarafındaki simgeyi seçin. Varsayılan adı kabul edin.
    • Yeni bir veri bağlamı sınıfı oluşturmak için Ekle ' yi seçin. Yapı iskelesi için yeni bir veri bağlamı oluşturulması gerekir. Yeni veri bağlamını bir sonraki bölümde kaldırırsınız.

Yapı iskelesi sonrası Güncelleştir Identity

  • Identity IdentityDbContext Alan/ Identity /Data/ Folder içinde oluşturulan desteği türetilmiş sınıfını silin.

  • Alanlarý/ Identity / Identity hostingstartup. cs öğesini silin.

  • _ Loginpartial. cshtml dosyasını güncelleştirin:

    • Sayfaları/ _ loginpartial. cshtml öğesini sayfalara/paylaşılan/ _ loginpartial. cshtml'e taşıyın.
    • asp-area="Identity"Form ve bağlantı bağlantılarına ekleyin.
    • <form />Öğesini olarak güncelleştirin <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right"> .

    Aşağıdaki kod güncelleştirilmiş _ loginpartial. cshtml dosyasını gösterir:

    @using Microsoft.AspNetCore.Identity
    
    @inject SignInManager<ApplicationUser> SignInManager
    @inject UserManager<ApplicationUser> UserManager
    
    @if (SignInManager.IsSignedIn(User))
    {
        <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">
            <ul class="nav navbar-nav navbar-right">
                <li>
                    <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
                </li>
                <li>
                    <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
                </li>
            </ul>
        </form>
    }
    else
    {
        <ul class="nav navbar-nav navbar-right">
            <li><a asp-area="Identity" asp-page="/Account/Register">Register</a></li>
            <li><a asp-area="Identity" asp-page="/Account/Login">Log in</a></li>
        </ul>
    }
    

ConfigureServicesAşağıdaki kodla güncelleştirin:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<ApplicationUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    // Register no-op EmailSender used by account confirmation and password reset 
    // during development
    services.AddSingleton<IEmailSender, EmailSender>();
}

RazorSayfalar proje dosyalarında yapılan Razor değişiklikler

Düzen dosyası

  • Sayfaları/ _ düzeni. cshtml 'Yi sayfalara/paylaşılan/ _ Layout. cshtml öğesine taşı

  • / Identity /Pages/ _ viewstart. cshtml alanlarında, olarak değiştirin Layout = "/Pages/_Layout.cshtml" Layout = "/Pages/Shared/_Layout.cshtml" .

  • _ Layout. cshtml dosyası aşağıdaki değişiklikleri içerir:

    • <partial name="_CookieConsentPartial" /> eklendi. Daha fazla bilgi için bkz. GDPR Support in ASP.NET Core.
    • 2.2.0 'den 3.3.1 'e jQuery değişiklikleri.

_ValidationScriptsPartial. cshtml

  • Sayfa/ _ ValidationScriptsPartial. cshtml sayfa/paylaşılan/ _ validationscriptspartial. cshtml'ye gider.
  • jQuery. Validate/ 1.14.0 , jQuery. Validate/1.17.0 üzerinde değişiklikler.

Yeni dosyalar

Aşağıdaki dosyalar eklendi:

  • Privacy. cshtml
  • Privacy. cshtml. cs

yukarıdaki dosyalar hakkında bilgi için bkz. GDPR support ASP.NET Core .

MVC proje dosyalarında yapılan değişiklikler Razor

Düzen dosyası

Layout. cshtml dosyası aşağıdaki değişiklikleri içerir:

  • <partial name="_CookieConsentPartial" /> eklendi.
  • 2.2.0 'den 3.3.1 'e jQuery değişiklikleri

_ValidationScriptsPartial. cshtml

jQuery. Validate/ 1.14.0 'ta jQuery. Validate/1.17.0 değişiklikleri

Yeni dosyalar ve eylem yöntemleri

Aşağıdakiler eklendi:

  • Görünümler/ Home / Privacy . cshtml
  • PrivacyEylem yöntemi Home denetleyiciye eklenir.

yukarıdaki dosyalar hakkında bilgi için bkz. GDPR support ASP.NET Core .

Dosyadaki launchSettings.jsdeğişiklikler

ASP.NET Core uygulamalar artık varsayılan olarak HTTPS 'yi kullanırken, dosya üzerinde özellikler/launchSettings.js değişmiştir.

Aşağıdaki JSON, dosyasında önceki 2,0 şablon tarafından oluşturulan launchSettings.js gösterir:

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:1799/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApp1": {
      "commandName": "Project",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:1798/"
    }
  }
}

Aşağıdaki JSON, dosyasında yeni 2,1 şablon tarafından oluşturulan launchSettings.js gösterir:

{
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:39191",
      "sslPort": 44390
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "WebApp1": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Daha fazla bilgi için bkz. ASP.NET Core 'de HTTPS 'yi zorla.

Yeni değişiklikler

FileResult Aralık üst bilgisi

FileResult Varsayılan olarak Accept-Ranges üst bilgisini artık işleme alınmaz. Üstbilgiyi etkinleştirmek için Accept-Ranges EnableRangeProcessing olarak ayarlayın true .

ControllerBase. File ve PhysicalFile Aralık üst bilgisi

Aşağıdaki ControllerBase Yöntemler artık varsayılan olarak Accept-Ranges üst bilgisini işler:

Üstbilgiyi etkinleştirmek için Accept-Ranges EnableRangeProcessing parametresini olarak ayarlayın true .

Ek değişiklikler