ASP.NET Core

ASP.NET Core Razor Pages 実行時に画面更新で Razor(cshtml) を更新

2020年7月2日

ASP.NET MVC では、実行時にも cshtml に対して行った変更は、画面更新時に再コンパイルされて画面に変更内容が反映されていました。ASP.NET Core 3 ではデフォルトの状態では、実行時に cshtml に行われた変更は画面更新後に反映されません。

開発時には cshtml へ変更を加えることも頻繁に発生しますし、アプリケーション実行状態のまま cshtml への変更を都度確認していきたいところです。このような場合には、次の手順を実施します。

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation のインストール

NuGet 経由で、Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation をインストールします。

AddRazorRuntimeCompilation() の呼び出し

Startup.cs の ConfigureServices メソッド内で、services.AddRazorPages() 配下にある AddRazorRuntimeCompilation() を呼び出します。

public class Startup
{
    ...

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))
        );
        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true).AddEntityFrameworkStores<ApplicationDbContext>();
        services.AddRazorPages().AddRazorRuntimeCompilation();
    }

    ...
}

(更新)より簡単な手順

上記のように Startup.cs に記述を行うよりも、より簡単な手順がありました。アプリケーション作成時に、「Enable Razor runtime compilation」のチェックボックスをチェックするだけです。

そうすると、csproj ファイルに、Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation が追加されることが分かります。

csproj ファイル

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

  <PropertyGroup>
    ...
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.1.5" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.1.5" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.1.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.5" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.5" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.5" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.0-preview1.19506.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.0-preview1-19509-03" />
  </ItemGroup>

</Project>

リファレンス

https://docs.microsoft.com/ja-jp/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0&tabs=visual-studio

-ASP.NET Core