ASP.NET Core 2.0 から 2.1 への移行Migrate from ASP.NET Core 2.0 to 2.1

作成者: Rick AndersonBy Rick Anderson

ASP.NET Core 2.1 の新機能の概要については ASP.NET Core 2.1 の新機能 を参照してください。See What's new in ASP.NET Core 2.1 for an overview of the new features in ASP.NET Core 2.1.

この記事では:This article:

  • ASP.NET Core 2.0 アプリ 2.1 への移行の基本について説明します。Covers the basics of migrating an ASP.NET Core 2.0 app to 2.1.
  • ASP.NET Core web アプリケーション テンプレートへの変更の概要を示します。Provides an overview of the changes to the ASP.NET Core web application templates.

2.1 における変更の概要を簡単に知るためには:A quick way to get an overview of the changes in 2.1 is to:

  • WebApp1 をという名前の ASP.NET Core 2.0 web アプリを作成します。Create an ASP.NET Core 2.0 web app named WebApp1.
  • ソース管理システムで、WebApp1 をコミットします。Commit the WebApp1 in a source control system.
  • WebApp1 を削除し、同じ場所に WebApp1 をという名前の ASP.NET Core 2.1 web アプリを作成します。Delete WebApp1 and create an ASP.NET Core 2.1 web app named WebApp1 in the same place.
  • バージョン 2.1 での変更を確認します。Review the changes in the 2.1 version.

この記事では、ASP.NET Core 2.1 を移行の概要を示します。This article provides an overview on migration to ASP.NET Core 2.1. バージョン 2.1 に移行するために必要なすべての変更の完全な一覧は含まれません。It doesn't contain a complete list of all changes needed to migrate to version 2.1. いくつかのプロジェクトでは、プロジェクトの作成時に選択したオプションと、プロジェクトに加えられた変更に応じてさらに手順を必要があります。Some projects might require more steps depending on the options selected when the project was created and modifications made to the project.

2.1 バージョンを使用するようにプロジェクト ファイルを更新するUpdate the project file to use 2.1 versions

プロジェクト ファイルを更新します。Update the project file:

  • プロジェクト ファイルを更新することで、ターゲット フレームワークを .NET Core 2.1 に変更<TargetFramework>netcoreapp2.1</TargetFramework>します。Change the target framework to .NET Core 2.1 by updating the project file to <TargetFramework>netcoreapp2.1</TargetFramework>.
  • パッケージ参照を置き換えるMicrosoft.AspNetCore.Allパッケージの参照でMicrosoft.AspNetCore.Appします。Replace the package reference for Microsoft.AspNetCore.All with a package reference for Microsoft.AspNetCore.App. 削除された依存関係を追加する必要がありますMicrosoft.AspNetCore.Allします。You may need to add dependencies that were removed from Microsoft.AspNetCore.All. 詳細については、ASP.NET Core 2.0 用の Microsoft.AspNetCore.All メタパッケージ および ASP.NET Core 2.1 以降用 Microsoft.AspNetCore.App メタパッケージ を参照してください。For more information, see ASP.NET Core 2.0 用の Microsoft.AspNetCore.All メタパッケージ and ASP.NET Core 2.1 以降用 Microsoft.AspNetCore.App メタパッケージ. .NET Framework を対象とするアプリの場合。For apps that target the .NET Framework:
    • メタパッケージ参照の代わりに個々 のパッケージ参照を追加します。Add individual package references instead of a metapackage reference.
    • 2.1 には、各パッケージ参照を更新します。Update each package reference to 2.1.
  • 参照を削除**<DotNetCliToolReference>** 次のパッケージの要素。Remove references to <DotNetCliToolReference> elements for the following packages. これらのツールは既定では、.NET Core CLI でバンドルされていて、個別にインストールする必要はありません。These tools are bundled by default in the .NET Core CLI and don't need to be installed separately.
    • Microsoft.DotNet.Watcher.Tools (dotnet watch)Microsoft.DotNet.Watcher.Tools (dotnet watch)
    • Microsoft.EntityFrameworkCore.Tools.DotNet (dotnet ef)Microsoft.EntityFrameworkCore.Tools.DotNet (dotnet ef)
    • Microsoft.Extensions.Caching.SqlConfig.Tools (dotnet sql-cache)Microsoft.Extensions.Caching.SqlConfig.Tools (dotnet sql-cache)
    • Microsoft.Extensions.SecretManager.Tools (dotnet user-secrets)Microsoft.Extensions.SecretManager.Tools (dotnet user-secrets)
  • (省略可能): 削除することができます**<DotNetCliToolReference>** 要素Microsoft.VisualStudio.Web.CodeGeneration.Toolsします。Optional: you can remove the <DotNetCliToolReference> element for Microsoft.VisualStudio.Web.CodeGeneration.Tools. 実行して、グローバルにインストールされているバージョンでこのツールを置き換えることができますdotnet tool install -g dotnet-aspnet-codegeneratorします。You can replace this tool with a globally installed version by running dotnet tool install -g dotnet-aspnet-codegenerator.

次のマークアップは、2.0 プロジェクトのテンプレートによって生成されたファイルを示しています。The following markup shows the template-generated 2.0 project file:

<Project Sdk="Microsoft.NET.Sdk.Web">
    <UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.8" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.4" PrivateAssets="All" />
    <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" />

次のマークアップは、2.1 プロジェクトのテンプレートによって生成されたファイルを示しています。The following markup shows the template-generated 2.1 project file:

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

    <UserSecretsId>aspnet-{Project Name}-{GUID}</UserSecretsId>

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


共有ランタイムを対象とするプロジェクトの規則Rules for projects targeting the shared runtime

ASP.NET Core には、次の共有ランタイムが含まれています。ASP.NET Core includes the following shared runtimes:

パッケージの参照によって指定されたバージョンが、最低限必要なバージョン。The version specified by the package reference is the minimum required version. これらのパッケージのバージョンがコンピューター 2.1.0 のみで実行されない 2.1.1 を参照するプロジェクトなどのランタイムをインストールします。For example, a project referencing the 2.1.1 versions of these packages won't run on a machine with only the 2.1.0 runtime installed.

共有ランタイムを対象とするプロジェクトの既知の問題:Known issues for projects targeting the shared runtime:

  • 使用するMicrosoft.AspNetCore.Appと Entity Framework Core 2.1.1 2.1.0 とパッケージの競合によって NuGet 復元が失敗します。Using Microsoft.AspNetCore.App 2.1.0 with Entity Framework Core 2.1.1 causes NuGet restore failures due to package conflicts. 推奨されるソリューションは、アップグレードするMicrosoft.AspNetCore.App2.1.1 にします。The recommended solution is to upgrade Microsoft.AspNetCore.App to 2.1.1. 詳細については、次を参照してください。 Microsoft.AspNetCore.App と依存関係を共有するパッケージがパッチ バージョンを参照できませんします。For more information, see Packages that share dependencies with Microsoft.AspNetCore.App cannot reference patch versions.

  • 必要がありますを使用するすべてのプロジェクトMicrosoft.AspNetCore.AllまたはMicrosoft.AspNetCore.App別のプロジェクトを使用してへの参照プロジェクトにはが含まれている場合でも、プロジェクト ファイルで、パッケージのパッケージ参照の追加する必要がありますMicrosoft.AspNetCore.AllまたはMicrosoft.AspNetCore.Appします。All projects that must use Microsoft.AspNetCore.All or Microsoft.AspNetCore.App should add a package reference for the package in the project file, even if they contain a project reference to another project using Microsoft.AspNetCore.All or Microsoft.AspNetCore.App.


    • MyApp パッケージを参照するMicrosoft.AspNetCore.Appします。MyApp has a package reference to Microsoft.AspNetCore.App.
    • MyApp.Tests 参照をプロジェクトがMyApp.csprojします。MyApp.Tests has a project reference to MyApp.csproj.

    パッケージ参照の追加Microsoft.AspNetCore.AppMyApp.Testsします。Add a package reference for Microsoft.AspNetCore.App to MyApp.Tests. 詳細については、次を参照してください。統合テストを設定するのが難しいと共有フレームワークのサービスの中断がします。For more information, see Integration testing is hard to set up and may break on shared framework servicing.

2.1 の Docker イメージを更新します。Update to the 2.1 Docker images

ASP.NET Core 2.1 では、Docker イメージに移行、 dotnet/dotnet-docker GitHub リポジトリします。In ASP.NET Core 2.1, the Docker images migrated to the dotnet/dotnet-docker GitHub repository. 次の表は、Docker イメージとタグの変更を示しています。The following table shows the Docker image and tag changes:

2.02.0 2.12.1
microsoft/aspnetcore:2.0microsoft/aspnetcore:2.0 microsoft/dotnet:2.1-aspnetcore-ランタイムmicrosoft/dotnet:2.1-aspnetcore-runtime
microsoft/aspnetcore-ビルド: 2.0microsoft/aspnetcore-build:2.0 microsoft/dotnet:2.1-sdkmicrosoft/dotnet:2.1-sdk

変更、FROM内の行、 Dockerfile 2.1 の列を前の表で、新しいイメージの名前とタグを使用します。Change the FROM lines in your Dockerfile to use the new image names and tags in the preceding table's 2.1 column. 詳細については、次を参照してください。 aspnetcore docker リポジトリから dotnet への移行します。For more information, see Migrating from aspnetcore docker repos to dotnet.

Main への変更Changes to Main

次の図は、生成されたテンプレートに加えられた変更を示してProgram.csファイル。The following images show the changes made to the templated generated Program.cs file.


上の図は、赤で、削除を行う 2.0 バージョンを示します。The preceding image shows the 2.0 version with the deletions in red.

2.1 のコードを次の図に示します。The following image shows the 2.1 code. 緑色でコードには、バージョン 2.0 が置き換えられます。The code in green replaced the 2.0 version:


次のコードは、バージョン 2.1 のProgram.cs:The following code shows the 2.1 version of Program.cs:

namespace WebApp1
    public class Program
        public static void Main(string[] args)

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>

新しいMainへの呼び出しを置き換えるBuildWebHostCreateWebHostBuilderします。The new Main replaces the call to BuildWebHost with CreateWebHostBuilder. IWebHostBuilder新しいをサポートするために追加された統合テスト インフラストラクチャします。IWebHostBuilder was added to support a new integration test infrastructure.

スタートアップの変更Changes to Startup

次のコードを 2.1 のテンプレートが生成されたコードに変更を示します。The following code shows the changes to 2.1 template generated code. すべての変更は、点を除いて、コードに新しく追加されたUseBrowserLinkは削除されました。All changes are newly added code, except that UseBrowserLink has been removed:

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;


        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            if (env.IsDevelopment())

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


上記のコード変更の詳細については。The preceding code changes are detailed in:

認証コードの変更Changes to authentication code

ASP.NET Core 2.1 ではASP.NET Core Identityとして、 Razor クラス ライブラリ(RCL)。ASP.NET Core 2.1 provides ASP.NET Core Identity as a Razor Class Library (RCL).

既定 2.1 Identity UI により、バージョン 2.0 経由で重要な新機能は現在提供します。The default 2.1 Identity UI doesn't currently provide significant new features over the 2.0 version. Id に置き換えて、RCL パッケージは省略可能です。Replacing Identity with the RCL package is optional. テンプレートの置き換えにメリットには、Identity RCL バージョンを使用したコードが含まれますが生成されます。The advantages to replacing the template generated Identity code with the RCL version include:

  • 多くのファイルは、ソース ツリーから移動されます。Many files are moved out of your source tree.
  • バグ修正や新機能の Id に含まれる、 Microsoft.AspNetCore.App メタパッケージします。Any bug fixes or new features to Identity are included in the Microsoft.AspNetCore.App metapackage. 自動的に更新された Id を取得するときにMicrosoft.AspNetCore.Appが更新されます。You automatically get the updated Identity when Microsoft.AspNetCore.App is updated.

自明でない場合、テンプレートへの変更には、Id コードが生成されます。If you've made non-trivial changes to the template generated Identity code:

  • 上記の利点はいるでしょういないへの変換を揃え、RCL バージョン。The preceding advantages probably do not justify converting to the the RCL version.
  • ASP.NET Core 2.0 Identity コードを保持することができますが完全にサポートします。You can keep your ASP.NET Core 2.0 Identity code, it's fully supported.

2.1 identity でのエンドポイントを公開する、Identity領域。Identity 2.1 exposes endpoints with the Identity area. たとえば、次の表は、2.0 から 2.1 に変更の Id のエンドポイントの例を示します。For example, the follow table shows examples of Identity endpoints that change from 2.0 to 2.1:

2.0 の URL2.0 URL 2.1 URL2.1 URL
/アカウント/ログイン/Account/Login /ユーザー/アカウント/ログイン/Identity/Account/Login
/Account/Logout/Account/Logout /ユーザー/アカウント/ログアウト/Identity/Account/Logout
/アカウント/管理/Account/Manage /ユーザー/アカウント/管理/Identity/Account/Manage

Id を使用してコードがあるし、2.0 を置換するアプリケーションの Id の Url を考慮に入れる 2.1 Identity ライブラリ必要性と Identity UI が/Identityセグメントの前の Uri に追加します。Applications that have code using Identity and replace 2.0 Identity UI with the 2.1 Identity Library need to take into account Identity URLs have /Identity segment prepended to the URIs. 新しいを処理する方法の 1 つの Identity エンドポイントはからなど、リダイレクトを設定する/Account/Login/Identity/Account/Loginします。One way to handle the new Identity endpoints is to set up redirects, for example from /Account/Login to /Identity/Account/Login.

バージョン 2.1 の Id を更新します。Update Identity to version 2.1

次のオプションを 2.1 の Id を更新するには。The following options are available to update Identity to 2.1.

  • Identity UI 2.0 コードを変更せずに使用します。Use the Identity UI 2.0 code with no changes. Identity UI 2.0 コードを使用することがサポートされます。Using Identity UI 2.0 code is fully supported. これは、生成された Id コードに大幅な変更を行ったときに適切なアプローチです。This is a good approach when significant changes have been made to the generated Identity code.
  • 既存の Identity 2.0 コードを削除およびスキャフォールディング Identityをプロジェクトにします。Delete your existing Identity 2.0 code and Scaffold Identity into your project. プロジェクトを使用して、 ASP.NET Core Identity Razor クラス ライブラリします。Your project will use the ASP.NET Core Identity Razor Class Library. コードとのいずれかに変更したユーザーの UI コードの UI を生成することができます。You can generate code and UI for any of the Identity UI code that you modified. 新しくスキャフォールディングの UI コードをコードの変更を適用します。Apply your code changes to the newly scaffolded UI code.
  • Identity 2.0 の既存のコードを削除し、スキャフォールディング Identityするオプションを使用してプロジェクトにすべてのファイルを上書きします。Delete your existing Identity 2.0 code and Scaffold Identity into your project with the option to Override all files.

2.0 の Id を置き換える Identity 2.1 Razor クラス ライブラリを使用した UIReplace Identity 2.0 UI with the Identity 2.1 Razor Class Library

このセクションで ASP.NET Core 2.0 テンプレート生成 Id のコードを交換する手順の概要、 ASP.NET Core Identity Razor クラス ライブラリします。This section outlines the steps to replace the ASP.NET Core 2.0 template generated Identity code with the ASP.NET Core Identity Razor Class Library. 次の手順は、Razor ページ プロジェクトの場合は、MVC プロジェクトの方法は似ています。The following steps are for a Razor Pages project, but the approach for an MVC project is similar.

  • 確認、 2.1 のバージョンを使用するプロジェクト ファイルを更新Verify the project file is updated to use 2.1 versions
  • 次のフォルダーとそれらのすべてのファイルを削除します。Delete the following folders and all the files in them:
    • コントローラーControllers
    • ページ/アカウント/Pages/Account/
    • 拡張機能Extensions
  • プロジェクトをビルドします。Build the project.
  • Identity のスキャフォールディングをプロジェクトに。Scaffold Identity into your project:
    • 既存のプロジェクトを選択 _Layout.cshtmlファイル。Select the projects exiting _Layout.cshtml file.
    • 選択、 + アイコンの右側にある、データ コンテキスト クラスします。Select the + icon on the right side of the Data context class. 既定の名前をそのまま使用します。Accept the default name.
    • 選択追加を新しいデータ コンテキスト クラスを作成します。Select Add to create a new Data context class. 新しいデータ コンテキストを作成すると、スキャフォールディングする必要があります。Creating a new data context is required for to scaffold. 次のセクションでは、新しいデータ コンテキストを削除します。You remove the new data context in the next section.

Identity のスキャフォールディング後に更新します。Update after scaffolding Identity

  • 生成された Identity scaffolder を削除IdentityDbContext派生クラスで、 領域/ユーザー/データ/ フォルダー。Delete the Identity scaffolder generated IdentityDbContext derived class in the Areas/Identity/Data/ folder.

  • 削除Areas/Identity/IdentityHostingStartup.csDelete Areas/Identity/IdentityHostingStartup.cs

  • 更新プログラム、 _LoginPartial.cshtmlファイル。Update the _LoginPartial.cshtml file:

    • 移動Pages/_LoginPartial.cshtmlPages/Shared/_LoginPartial.cshtmlMove Pages/_LoginPartial.cshtml to Pages/Shared/_LoginPartial.cshtml
    • 追加asp-area="Identity"フォームとアンカー リンクにします。Add asp-area="Identity" to the form and anchor links.
    • 更新プログラム、<form />要素 <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">Update the <form /> element to <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/Index", new { area = "" })" method="post" id="logoutForm" class="navbar-right">

    次のコードは、更新された _LoginPartial.cshtmlファイル。The following code shows the updated _LoginPartial.cshtml file:

    @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">
                    <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
                    <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
        <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>

UpdateConfigureServicesを次のコード。Update ConfigureServices with the following code:

public void ConfigureServices(IServiceCollection services)
    services.AddDbContext<ApplicationDbContext>(options =>



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

Razor ページ プロジェクトを Razor ファイルを変更します。Changes to Razor Pages projects Razor files

レイアウト ファイルThe layout file

  • 移動Pages/_Layout.cshtmlPages/Shared/_Layout.cshtmlMove Pages/_Layout.cshtml to Pages/Shared/_Layout.cshtml

  • Layout.cshtmlファイルは、次の変更。The Layout.cshtml file has the following changes:

    • <partial name="_CookieConsentPartial" /> 追加されます。<partial name="_CookieConsentPartial" /> is added. 詳細については、ASP.NET Core での GDPR のサポートに関するページを参照してください。For more information, see GDPR support in ASP.NET Core.
    • 3.3.1 2.2.0 から jQuery の変更jQuery changes from 2.2.0 to 3.3.1


  • Pages/_ValidationScriptsPartial.cshtml移動Pages/Shared/_ValidationScriptsPartial.cshtmlPages/_ValidationScriptsPartial.cshtml moves to Pages/Shared/_ValidationScriptsPartial.cshtml
  • jquery.validate/1.14.0変更jquery.validate/1.17.0jquery.validate/1.14.0 changes to jquery.validate/1.17.0

新しいファイルNew files

次のファイルが追加されます。The following files are added:

  • Privacy.cshtmlPrivacy.cshtml
  • Privacy.cshtml.csPrivacy.cshtml.cs

参照してくださいASP.NET Core での GDPR サポートについては、上記のファイル。See GDPR support in ASP.NET Core for information on the preceding files.

MVC プロジェクトの Razor ファイルへの変更Changes to MVC projects Razor files

レイアウト ファイルThe layout file

Layout.cshtmlファイルは、次の変更。The Layout.cshtml file has the following changes:

  • <partial name="_CookieConsentPartial" /> 追加されます。<partial name="_CookieConsentPartial" /> is added.
  • 3.3.1 2.2.0 から jQuery の変更jQuery changes from 2.2.0 to 3.3.1


jquery.validate/1.14.0変更jquery.validate/1.17.0jquery.validate/1.14.0 changes to jquery.validate/1.17.0

新しいファイルとアクション メソッドNew files and action methods

次のものが追加されます。The following are added:

  • Views/Home/Privacy.cshtmlViews/Home/Privacy.cshtml
  • Privacyアクション メソッドは、Home コント ローラーに追加されます。The Privacy action method is added to the Home controller.

参照してくださいASP.NET Core での GDPR サポートについては、上記のファイル。See GDPR support in ASP.NET Core for information on the preceding files.

追加の変更Additional changes