Razor ASP.NET Core'da dosya derleme

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

Not

Çalışma zamanı derlemesi:

  • .NET 10'dan başlayarak kullanım dışı kaldı.
  • Uygulama bileşenleri Razor için Blazor 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 senaryoları için önerilmez.

Üretim senaryoları için varsayılan derleme zamanı derlemesini kullanın. Geliştirme senaryoları için Anında Yeniden Yükleme'yi kullanın. Daha fazla bilgi için bkz Razor . Çalışma zamanı derlemesi kullanımdan kaldırıldı.

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üklemeRazordesteklenir.

Not

Razor .NET 10'dan başlayarak çalışma zamanı derlemesi kullanım dışı bırakıldı. Etkinleştirildiğinde, çalışma zamanı derlemesi .NET Çalışırken Yeniden Yükleme devre dışı bırakır. Geliştirme senaryoları için alternatif olarak Anında Yeniden Yükleme kullanmanızı öneririz. Daha fazla bilgi için bkz Razor . Çalışma zamanı derlemesi kullanımdan kaldırıldı.

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.

Yalnızca Development ortamı için çalışma zamanı derlemesini etkinleştirmek üzere:

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

  2. AddRazorRuntimeCompilation Geçerli ortam Geliştirme olarak ayarlandığında çağrısı Program.cs 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 Development 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 ViewCompilationSample başlatma profilleri için çalışma zamanı derlemesini IIS Express 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 derleme düzeyinde bir Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 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 MyClassLibRazorbir sınıf kitaplığına (RCL) başvurdığı Razor bir senaryo düşünün. RCL, MVC ve _Layout.cshtml Pages projeleri tarafından kullanılan bir Razor 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 MvcRazorRuntimeCompilationOptionsyapılandırınProgram.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));
    });
    

    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, SDKRazor 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 veya sonraki sürümlerinde 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 Razor etkinleştir 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. Örneğin:

    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ı derlemeyi sadece Development ortamında etkinleştirmek için:

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

Aşağıdaki örnekte, çalışma zamanı derlemesi Development ve IIS Express başlatma profilleri için RazorPagesApp ortamında 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 derleme düzeyinde bir Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 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 MyClassLibRazorbir sınıf kitaplığına (RCL) başvurdığı Razor bir senaryo düşünün. RCL, ekibinizin tüm MVC ve _Layout.cshtml Pages projelerinin tükettiği bir Razor 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