Razor kompilasi file di ASP.NET Core

Razor file dengan .cshtml ekstensi dikompilasi pada waktu build dan penerbitan Razor menggunakan SDK. Kompilasi runtime dapat diaktifkan secara opsional dengan mengonfigurasi proyek.

Catatan

Kompilasi runtime:

Razor Kompilasi

Kompilasi Razor file build-time dan publish-time diaktifkan secara default oleh Razor SDK. Saat diaktifkan, kompilasi runtime melengkapi kompilasi build-time, memungkinkan Razor file diperbarui jika diedit saat aplikasi berjalan.

Memperbarui Razor tampilan dan Razor Halaman selama pengembangan saat aplikasi berjalan juga didukung menggunakan .NET Hot Reload.

Catatan

Saat diaktifkan, kompilasi runtime menonaktifkan .NET Hot Reload. Sebaiknya gunakan Hot Reload alih-alih Razor kompilasi runtime selama pengembangan.

Mengaktifkan kompilasi runtime untuk semua lingkungan

Untuk mengaktifkan kompilasi runtime untuk semua lingkungan:

  1. Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.

  2. Panggil AddRazorRuntimeCompilation di Program.cs:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddRazorPages()
        .AddRazorRuntimeCompilation();
    

Mengaktifkan kompilasi runtime secara kondisional

Kompilasi runtime dapat diaktifkan secara kondisional, yang memastikan bahwa output yang diterbitkan:

  • Menggunakan tampilan yang dikompilasi.
  • Tidak mengaktifkan pengamat file dalam produksi.

Untuk mengaktifkan kompilasi runtime hanya untuk lingkungan Pengembangan:

  1. Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.

  2. Program.cs Panggil AddRazorRuntimeCompilation saat lingkungan saat ini diatur ke Pengembangan:

    var builder = WebApplication.CreateBuilder(args);
    
    var mvcBuilder = builder.Services.AddRazorPages();
    
    if (builder.Environment.IsDevelopment())
    {
        mvcBuilder.AddRazorRuntimeCompilation();
    }
    

Kompilasi runtime juga dapat diaktifkan dengan perakitan startup hosting. Untuk mengaktifkan kompilasi runtime di lingkungan Pengembangan untuk profil peluncuran tertentu:

  1. Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
  2. Ubah bagian profil peluncuran environmentVariables di launchSettings.json:
    • Verifikasi bahwa ASPNETCORE_ENVIRONMENT diatur ke "Development".

    • Atur ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ke "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Misalnya, berikut ini launchSettings.json memungkinkan kompilasi runtime untuk profil peluncuran ViewCompilationSample dan IIS Express :

      {
        "iisSettings": {
          "windowsAuthentication": false,
          "anonymousAuthentication": true,
          "iisExpress": {
            "applicationUrl": "http://localhost:7098",
            "sslPort": 44332
          }
        },
        "profiles": {
          "ViewCompilationSample": {
            "commandName": "Project",
            "dotnetRunMessages": true,
            "launchBrowser": true,
            "applicationUrl": "https://localhost:7173;http://localhost:5251",
            "environmentVariables": {
              "ASPNETCORE_ENVIRONMENT": "Development",
              "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
            }
          },
          "IIS Express": {
            "commandName": "IISExpress",
            "launchBrowser": true,
            "environmentVariables": {
              "ASPNETCORE_ENVIRONMENT": "Development",
              "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
            }
          }
        }
      }
      

Dengan pendekatan ini, tidak ada perubahan kode yang diperlukan dalam Program.cs. Pada runtime, ASP.NET Core mencari atribut HostingStartup tingkat perakitan di Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Atribut HostingStartup menentukan kode startup aplikasi untuk dijalankan dan kode startup tersebut memungkinkan kompilasi runtime.

Mengaktifkan kompilasi runtime untuk Razor Pustaka Kelas

Pertimbangkan skenario di mana Razor proyek Pages mereferensikanRazorPustaka Kelas (RCL) bernama MyClassLib. RCL berisi file yang _Layout.cshtml digunakan oleh proyek MVC dan Razor Pages. Untuk mengaktifkan kompilasi runtime untuk _Layout.cshtml file di RCL tersebut Razor , buat perubahan berikut dalam proyek Pages:

  1. Aktifkan kompilasi runtime dengan instruksi di Mengaktifkan kompilasi runtime secara kondisional.

  2. Konfigurasikan MvcRazorRuntimeCompilationOptions di Program.cs:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddRazorPages();
    
    builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
    {
        var libraryPath = Path.GetFullPath(
            Path.Combine(builder.Environment.ContentRootPath, "..", "MyClassLib"));
    
        options.FileProviders.Add(new PhysicalFileProvider(libraryPath));
    });
    

    Kode sebelumnya membangun jalur absolut ke MyClassLib RCL. PHYSICALFileProvider API digunakan untuk menemukan direktori dan file di jalur absolut tersebut. Terakhir, PhysicalFileProvider instans ditambahkan ke koleksi penyedia file, yang memungkinkan akses ke file RCL .cshtml .

Sumber Daya Tambahan:

Razor file dengan .cshtml ekstensi dikompilasi pada waktu build dan penerbitan Razor menggunakan SDK. Kompilasi runtime mungkin diaktifkan secara opsional dengan mengonfigurasi proyek Anda.

Razor Kompilasi

Kompilasi Razor file build-time dan publish-time diaktifkan secara default oleh Razor SDK. Saat diaktifkan, kompilasi runtime melengkapi kompilasi build-time, memungkinkan Razor file diperbarui jika diedit.

Mengaktifkan kompilasi runtime saat pembuatan proyek

Templat Razor proyek Pages dan MVC menyertakan opsi untuk mengaktifkan kompilasi runtime saat proyek dibuat. Opsi ini didukung di ASP.NET Core 3.1 dan yang lebih baru.

Dalam dialog Buat aplikasi web ASP.NET Core baru:

  1. Pilih templat proyek Aplikasi Web atau Aplikasi Web (Model-View-Controller).
  2. Pilih kotak centang Aktifkan Razor kompilasi runtime.

Mengaktifkan kompilasi runtime dalam proyek yang ada

Untuk mengaktifkan kompilasi runtime untuk semua lingkungan dalam proyek yang ada:

  1. Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.

  2. Perbarui metode proyek Startup.ConfigureServices untuk menyertakan panggilan ke AddRazorRuntimeCompilation. Contohnya:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages()
            .AddRazorRuntimeCompilation();
    
        // code omitted for brevity
    }
    

Mengaktifkan kompilasi runtime secara kondisional dalam proyek yang ada

Kompilasi runtime dapat diaktifkan sewaktu-waktu sehingga hanya tersedia untuk pengembangan lokal. Mengaktifkan secara kondisional dengan cara ini memastikan bahwa output yang diterbitkan:

  • Menggunakan tampilan yang dikompilasi.
  • Tidak mengaktifkan pengamat file dalam produksi.

Untuk mengaktifkan kompilasi runtime hanya di lingkungan Pengembangan:

  1. Instal Microsoft.AspNetCore.Mvc.Razor. Paket RuntimeCompilation NuGet.
  2. Ubah bagian profil environmentVariables peluncuran di launchSettings.json:
    • Verifikasi ASPNETCORE_ENVIRONMENT diatur ke "Development".
    • Atur ASPNETCORE_HOSTINGSTARTUPASSEMBLIES ke "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Dalam contoh berikut, kompilasi runtime diaktifkan di lingkungan Pengembangan untuk IIS Express profil peluncuran dan RazorPagesApp :

{
    "iisSettings": {
      "windowsAuthentication": false,
      "anonymousAuthentication": true,
      "iisExpress": {
        "applicationUrl": "http://localhost:57676",
        "sslPort": 44364
      }
    },
    "profiles": {
      "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development",
          "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
        }
      },
      "RazorPagesApp": {
        "commandName": "Project",
        "launchBrowser": true,
        "applicationUrl": "https://localhost:5001;http://localhost:5000",
        "environmentVariables": {
          "ASPNETCORE_ENVIRONMENT": "Development",
          "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
        }
      }
    }
  }

Tidak ada perubahan kode yang diperlukan di kelas proyek Startup . Pada runtime, ASP.NET Core mencari atribut HostingStartup tingkat perakitan di Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Atribut HostingStartup menentukan kode startup aplikasi untuk dijalankan. Kode startup tersebut memungkinkan kompilasi runtime.

Mengaktifkan kompilasi runtime untuk Razor Pustaka Kelas

Pertimbangkan skenario di mana Razor proyek Pages mereferensikanRazorPustaka Kelas (RCL) bernama MyClassLib. RCL berisi _Layout.cshtml file yang digunakan semua proyek MVC dan Razor Pages tim Anda. Anda ingin mengaktifkan kompilasi runtime untuk file di RCL tersebut _Layout.cshtml . Buat perubahan berikut dalam Razor proyek Pages:

  1. Aktifkan kompilasi runtime dengan instruksi di Kompilasi runtime aktifkan secara kondisional di proyek yang ada.

  2. Konfigurasikan opsi kompilasi runtime di Startup.ConfigureServices:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
    
        services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
        {
            var libraryPath = Path.GetFullPath(
                Path.Combine(HostEnvironment.ContentRootPath, "..", "MyClassLib"));
            options.FileProviders.Add(new PhysicalFileProvider(libraryPath));
        });
    }
    

    Dalam kode sebelumnya, jalur absolut ke RCL MyClassLib dibangun. PHYSICALFileProvider API digunakan untuk menemukan direktori dan file di jalur absolut tersebut. Terakhir, PhysicalFileProvider instans ditambahkan ke koleksi penyedia file, yang memungkinkan akses ke file RCL .cshtml .

Sumber Daya Tambahan: