Razor ASP.NET Core'da dosya derleme

Razoruzantılı .cshtml dosyalar, SDK kullanılarak Razor hem derleme hem de yayımlama zamanında derlenir. Çalışma zamanı derlemesi isteğe bağlı olarak projeyi yapılandırarak etkinleştirilebilir.

Dekont

Çalışma zamanı derlemesi:

  • Uygulama bileşenleri Blazor için Razor desteklenmez.
  • Genel kullanım yönergelerini desteklemez.
  • Örtük kullanım yönergelerini desteklemez.
  • .NET Çalışırken Yeniden Yükleme devre dışı bırakır.
  • Üretim için değil geliştirme için önerilir.

Razor Derleme

Dosyaların derleme zamanı ve yayımlama zamanı derlemesi Razor , SDK tarafından Razor varsayılan olarak etkinleştirilir. Çalışma zamanı derlemesi etkinleştirildiğinde derleme zamanı derlemesini tamamlar Razor ve uygulama çalışırken düzenlendiklerinde dosyaların güncelleştirilebilmesini sağlar.

Uygulama çalışırken geliştirme sırasında görünümlerin ve Sayfaların güncelleştirilmesi Razor de .NET Çalışırken Yeniden Yükleme kullanılarak desteklenir.Razor

Dekont

Etkinleştirildiğinde, çalışma zamanı derlemesi .NET Çalışırken Yeniden Yükleme devre dışı bırakır. Geliştirme sırasında çalışma zamanı derlemesi Razor yerine Çalışırken Yeniden Yükleme kullanmanızı öneririz.

Tüm ortamlar için çalışma zamanı derlemesini etkinleştirme

Tüm ortamlar için çalışma zamanı derlemesini etkinleştirmek için:

  1. Microsoft.AspNetCore.Mvc'yi yükleyin.Razor. RuntimeCompilation NuGet paketi.

  2. çağrısıAddRazorRuntimeCompilation:Program.cs

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

Çalışma zamanı derlemesini koşullu olarak etkinleştirme

Çalışma zamanı derlemesi koşullu olarak etkinleştirilebilir ve bu da yayımlanan çıkışın şu şekilde olmasını sağlar:

  • Derlenmiş görünümleri kullanır.
  • Üretimde dosya izleyicilerini etkinleştirmez.

Çalışma zamanı derlemesini yalnızca Geliştirme ortamı için etkinleştirmek için:

  1. Microsoft.AspNetCore.Mvc'yi yükleyin.Razor. RuntimeCompilation NuGet paketi.

  2. Program.cs Geçerli ortam Geliştirme olarak ayarlandığında çağrısı AddRazorRuntimeCompilation yapma:

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

Çalışma zamanı derlemesi bir barındırma başlatma derlemesi ile de etkinleştirilebilir. Belirli başlatma profilleri için Geliştirme ortamında çalışma zamanı derlemesini etkinleştirmek için:

  1. Microsoft.AspNetCore.Mvc'yi yükleyin.Razor. RuntimeCompilation NuGet paketi.
  2. başlatma profilinin environmentVariables bölümünde değişiklik launchSettings.jsonyapma:
    • değerinin ASPNETCORE_ENVIRONMENT olarak ayarlandığını "Development"doğrulayın.

    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES seçeneğini "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" olarak ayarlayın. Örneğin, aşağıdakiler launchSettings.json ve IIS Express başlatma profilleri için çalışma zamanı derlemesini ViewCompilationSample etkinleştirir:

      {
        "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"
            }
          }
        }
      }
      

Bu yaklaşımla, içinde Program.cskod değişikliği gerekmez. çalışma zamanında, ASP.NET Core içinde Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationderleme düzeyinde bir HostingStartup özniteliği arar. HostingStartup özniteliği yürütülecek uygulama başlangıç kodunu belirtir ve bu başlangıç kodu çalışma zamanı derlemesini etkinleştirir.

Sınıf Kitaplığı için çalışma zamanı derlemesini Razor etkinleştirme

Pages projesinin MyClassLib adlı bir Sınıf Kitaplığına (RCL) başvurdığı Razor bir Razor senaryo düşünün. RCL, MVC ve Razor Pages projeleri tarafından kullanılan bir _Layout.cshtml dosya içerir. Bu RCL'deki dosya için çalışma zamanı derlemesini _Layout.cshtml etkinleştirmek için Sayfalar projesinde Razor aşağıdaki değişiklikleri yapın:

  1. Çalışma zamanı derlemesini koşullu olarak etkinleştirme başlığındaki yönergelerle çalışma zamanı derlemesini etkinleştirin.

  2. içinde Program.csyapılandırınMvcRazorRuntimeCompilationOptions:

    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));
    });
    

    Yukarıdaki kod MyClassLib RCL için mutlak bir yol oluşturur. PhysicalFileProvider API'si, bu mutlak yolda dizinleri ve dosyaları bulmak için kullanılır. Son olarak örnek, PhysicalFileProvider RCL'nin .cshtml dosyalarına erişim sağlayan bir dosya sağlayıcıları koleksiyonuna eklenir.

Ek kaynaklar

Razoruzantılı .cshtml dosyalar, SDK kullanılarak Razor hem derleme hem de yayımlama zamanında derlenir. Çalışma zamanı derlemesi, projenizi yapılandırarak isteğe bağlı olarak etkinleştirilebilir.

Razor Derleme

Dosyaların derleme zamanı ve yayımlama zamanı derlemesi Razor , SDK tarafından Razor varsayılan olarak etkinleştirilir. Çalışma zamanı derlemesi etkinleştirildiğinde derleme zamanı derlemesini tamamlayarak Razor dosyaların düzenlendikleri takdirde güncelleştirilebilmesini sağlar.

Proje oluşturma sırasında çalışma zamanı derlemesini etkinleştirme

Razor Sayfalar ve MVC proje şablonları, proje oluşturulduğunda çalışma zamanı derlemesini etkinleştirme seçeneği içerir. Bu seçenek ASP.NET Core 3.1 ve sonraki sürümlerde desteklenir.

Yeni ASP.NET Core web uygulaması oluştur iletişim kutusunda:

  1. Web Uygulaması veya Web Uygulaması (Model-Görünüm-Denetleyici) proje şablonunu seçin.
  2. Çalışma zamanı derlemesini etkinleştir Razor onay kutusunu seçin.

Var olan bir projede çalışma zamanı derlemesini etkinleştirme

Var olan bir projedeki tüm ortamlar için çalışma zamanı derlemesini etkinleştirmek için:

  1. Microsoft.AspNetCore.Mvc'yi yükleyin.Razor. RuntimeCompilation NuGet paketi.

  2. projenin Startup.ConfigureServices yöntemini çağrısı içerecek şekilde AddRazorRuntimeCompilationgüncelleştirin. Örnek:

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

Var olan bir projede çalışma zamanı derlemesini koşullu olarak etkinleştirme

Çalışma zamanı derlemesi, yalnızca yerel geliştirme için kullanılabilir olacak şekilde etkinleştirilebilir. Koşullu olarak bu şekilde etkinleştirme, yayımlanan çıkışın sağlanmasını sağlar:

  • Derlenmiş görünümleri kullanır.
  • Üretimde dosya izleyicilerini etkinleştirmez.

Çalışma zamanı derlemesini yalnızca Geliştirme ortamında etkinleştirmek için:

  1. Microsoft.AspNetCore.Mvc'yi yükleyin.Razor. RuntimeCompilation NuGet paketi.
  2. içindeki launchSettings.jsonbaşlatma profili environmentVariables bölümünü değiştirin:
    • Doğrula'nın olarak "Development"ayarlandığını doğrulayınASPNETCORE_ENVIRONMENT.
    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES seçeneğini "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" olarak ayarlayın.

Aşağıdaki örnekte, ve RazorPagesApp başlatma profilleri için IIS Express Geliştirme ortamında çalışma zamanı derlemesi etkinleştirilir:

{
    "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"
        }
      }
    }
  }

Projenin Startup sınıfında kod değişikliği gerekmez. çalışma zamanında, ASP.NET Core içinde Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationderleme düzeyinde bir HostingStartup özniteliği arar. HostingStartup özniteliği yürütülecek uygulama başlangıç kodunu belirtir. Bu başlangıç kodu çalışma zamanı derlemesini etkinleştirir.

Sınıf Kitaplığı için çalışma zamanı derlemesini Razor etkinleştirme

Pages projesinin MyClassLib adlı bir Sınıf Kitaplığına (RCL) başvurdığı Razor bir Razor senaryo düşünün. RCL, ekibinizin tüm MVC ve Razor Pages projelerinin tükettiği bir _Layout.cshtml dosya içerir. Bu RCL'deki dosya için çalışma zamanı derlemesini _Layout.cshtml etkinleştirmek istiyorsunuz. Sayfalar projesinde Razor aşağıdaki değişiklikleri yapın:

  1. Var olan bir projede çalışma zamanı derlemesini koşullu olarak etkinleştirme başlığındaki yönergelerle çalışma zamanı derlemesini etkinleştirin.

  2. içinde Startup.ConfigureServicesçalışma zamanı derleme seçeneklerini yapılandırın:

    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));
        });
    }
    

    Yukarıdaki kodda MyClassLib RCL'sinin mutlak yolu oluşturulur. PhysicalFileProvider API'si, bu mutlak yolda dizinleri ve dosyaları bulmak için kullanılır. Son olarak örnek, PhysicalFileProvider RCL'nin .cshtml dosyalarına erişim sağlayan bir dosya sağlayıcıları koleksiyonuna eklenir.

Ek kaynaklar