Razor compilazione di file in ASP.NET Core

Razori file con estensione .cshtml vengono compilati sia in fase di compilazione che in fase di pubblicazione usando l'SDKRazor. La compilazione in fase di esecuzione può essere abilitata facoltativamente configurando il progetto.

Nota

Compilazione in fase di esecuzione:

Razor compilazione

La compilazione in fase di compilazione e la compilazione in fase di pubblicazione dei Razor file è abilitata per impostazione predefinita dall'SDK Razor . Se abilitata, la compilazione in fase di esecuzione integra la compilazione in fase di compilazione, consentendo Razor l'aggiornamento dei file se vengono modificati durante l'esecuzione dell'app.

L'aggiornamento delle Razor visualizzazioni e Razor delle pagine durante lo sviluppo durante l'esecuzione dell'app è supportato anche tramite .NET Ricaricamento rapido.

Nota

Se abilitata, la compilazione di runtime disabilita .NET Ricaricamento rapido. È consigliabile usare Ricaricamento rapido anziché la compilazione in fase di Razor esecuzione durante lo sviluppo.

Abilitare la compilazione in fase di esecuzione per tutti gli ambienti

Per abilitare la compilazione in fase di esecuzione per tutti gli ambienti:

  1. Installare Microsoft.AspNetCore.Mvc.Razor. Pacchetto NuGet RuntimeCompilation.

  2. Chiamare AddRazorRuntimeCompilation in Program.cs:

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

Abilitare la compilazione in fase di esecuzione in modo condizionale

La compilazione in fase di esecuzione può essere abilitata in modo condizionale, in modo da garantire che l'output pubblicato:

  • Usa le viste compilate.
  • Non abilita i watcher di file nell'ambiente di produzione.

Per abilitare la compilazione di runtime solo per l'ambiente di sviluppo:

  1. Installare Microsoft.AspNetCore.Mvc.Razor. Pacchetto NuGet RuntimeCompilation.

  2. Chiamare AddRazorRuntimeCompilation quando Program.cs l'ambiente corrente è impostato su Sviluppo:

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

La compilazione in fase di esecuzione può essere abilitata anche con un assembly di avvio dell'hosting. Per abilitare la compilazione di runtime nell'ambiente di sviluppo per profili di avvio specifici:

  1. Installare Microsoft.AspNetCore.Mvc.Razor. Pacchetto NuGet RuntimeCompilation.
  2. Modificare la sezione del profilo di environmentVariables avvio in launchSettings.json:
    • Verificare che ASPNETCORE_ENVIRONMENT sia impostato su "Development".

    • Impostare ASPNETCORE_HOSTINGSTARTUPASSEMBLIES su "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Ad esempio, il codice seguente launchSettings.json abilita la compilazione di runtime per i ViewCompilationSample profili di avvio e 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"
            }
          }
        }
      }
      

Con questo approccio, non sono necessarie modifiche al codice in Program.cs. In fase di esecuzione, ASP.NET Core cerca un attributo HostingStartup a livello di assembly in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. L'attributo HostingStartup specifica il codice di avvio dell'app da eseguire e che il codice di avvio abilita la compilazione in fase di esecuzione.

Abilitare la compilazione in fase di esecuzione per una libreria di Razor classi

Si consideri uno scenario in cui un Razor progetto Pages fa riferimento a una Razor libreria di classi (RCL) denominata MyClassLib. L'RCL contiene un _Layout.cshtml file utilizzato dai progetti MVC e Razor Pages. Per abilitare la compilazione di runtime per il _Layout.cshtml file in tale RCL, apportare le modifiche seguenti nel Razor progetto Pages:

  1. Abilitare la compilazione di runtime con le istruzioni riportate in Abilitare la compilazione in fase di esecuzione in modo condizionale.

  2. Configurare MvcRazorRuntimeCompilationOptions in 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));
    });
    

    Il codice precedente compila un percorso assoluto per la libreria RCL MyClassLib . L'API PhysicalFileProvider viene usata per individuare directory e file in tale percorso assoluto. Infine, l'istanza PhysicalFileProvider viene aggiunta a una raccolta di provider di file, che consente l'accesso ai file rcl .cshtml .

Risorse aggiuntive

Razori file con estensione .cshtml vengono compilati sia in fase di compilazione che in fase di pubblicazione usando l'SDKRazor. La compilazione in fase di esecuzione può essere abilitata facoltativamente configurando il progetto.

Razor compilazione

La compilazione in fase di compilazione e la compilazione in fase di pubblicazione dei Razor file è abilitata per impostazione predefinita dall'SDK Razor . Se abilitata, la compilazione in fase di esecuzione integra la compilazione in fase di compilazione, consentendo Razor l'aggiornamento dei file se vengono modificati.

Abilitare la compilazione in fase di esecuzione alla creazione del progetto

I Razor modelli di progetto Pages e MVC includono un'opzione per abilitare la compilazione di runtime al momento della creazione del progetto. Questa opzione è supportata in ASP.NET Core 3.1 e versioni successive.

Nella finestra di dialogo Crea una nuova applicazione Web di ASP.NET Core:

  1. Selezionare il modello di progetto Applicazione Web o Applicazione Web (Model-View-Controller).
  2. Selezionare la casella di controllo Abilita Razor compilazione runtime.

Abilitare la compilazione in fase di esecuzione in un progetto esistente

Per abilitare la compilazione di runtime per tutti gli ambienti in un progetto esistente:

  1. Installare Microsoft.AspNetCore.Mvc.Razor. Pacchetto NuGet RuntimeCompilation.

  2. Aggiornare il metodo Startup.ConfigureServices del progetto per includere una chiamata a AddRazorRuntimeCompilation. Ad esempio:

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

Abilitare in modo condizionale la compilazione di runtime in un progetto esistente

La compilazione in fase di esecuzione può essere abilitata in modo che sia disponibile solo per lo sviluppo locale. L'abilitazione condizionale in questo modo garantisce che l'output pubblicato:

  • Usa le viste compilate.
  • Non abilita i watcher di file nell'ambiente di produzione.

Per abilitare la compilazione di runtime solo nell'ambiente di sviluppo:

  1. Installare Microsoft.AspNetCore.Mvc.Razor. Pacchetto NuGet RuntimeCompilation.
  2. Modificare la sezione del profilo environmentVariables di avvio in launchSettings.json:
    • Verificare ASPNETCORE_ENVIRONMENT che sia impostato su "Development".
    • Impostare ASPNETCORE_HOSTINGSTARTUPASSEMBLIES su "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Nell'esempio seguente la compilazione di runtime è abilitata nell'ambiente di sviluppo per i IIS Express profili di avvio e 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"
        }
      }
    }
  }

Non sono necessarie modifiche al codice nella classe del Startup progetto. In fase di esecuzione, ASP.NET Core cerca un attributo HostingStartup a livello di assembly in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. L'attributo HostingStartup specifica il codice di avvio dell'app da eseguire. Il codice di avvio abilita la compilazione in fase di esecuzione.

Abilitare la compilazione in fase di esecuzione per una libreria di Razor classi

Si consideri uno scenario in cui un Razor progetto Pages fa riferimento a una Razor libreria di classi (RCL) denominata MyClassLib. L'RCL contiene un _Layout.cshtml file usato da tutti i progetti MVC e Razor Pages del team. Si vuole abilitare la compilazione di runtime per il _Layout.cshtml file in tale RCL. Apportare le modifiche seguenti nel Razor progetto Pages:

  1. Abilitare la compilazione in fase di esecuzione con le istruzioni riportate in Abilitare in modo condizionale la compilazione di runtime in un progetto esistente.

  2. Configurare le opzioni di compilazione di runtime in 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));
        });
    }
    

    Nel codice precedente viene costruito un percorso assoluto dell'RCL MyClassLib . L'API PhysicalFileProvider viene usata per individuare directory e file in tale percorso assoluto. Infine, l'istanza PhysicalFileProvider viene aggiunta a una raccolta di provider di file, che consente l'accesso ai file rcl .cshtml .

Risorse aggiuntive