Razor Datei Kompilierung in ASP.net CoreRazor file compilation in ASP.NET Core

Von Rick AndersonBy Rick Anderson

RazorDateien mit der Erweiterung . cshtml werden zum Zeitpunkt der Erstellung und Veröffentlichung mit dem Razor SDKkompiliert.Razor files with a .cshtml extension are compiled at both build and publish time using the Razor SDK. Die Runtime-Kompilierung kann optional durch Konfigurieren des Projekts aktiviert werden.Runtime compilation may be optionally enabled by configuring your project.

Razor NeuauflageRazor compilation

Kompilierzeit-und Veröffentlichungszeit Kompilierung von Razor Dateien wird vom SDK standardmäßig aktiviert Razor .Build-time and publish-time compilation of Razor files is enabled by default by the Razor SDK. Wenn diese Option aktiviert ist, ergänzt die Lauf Zeit Kompilierung die Kompilierungs Kompilierung, sodass Razor Dateien aktualisiert werden können, wenn Sie bearbeitet werden.When enabled, runtime compilation complements build-time compilation, allowing Razor files to be updated if they're edited.

Aktivieren der Lauf Zeit Kompilierung bei der Projekt ErstellungEnable runtime compilation at project creation

Die Razor Seiten und MVC-Projektvorlagen enthalten eine Option zum Aktivieren der Lauf Zeit Kompilierung, wenn das Projekt erstellt wird.The Razor Pages and MVC project templates include an option to enable runtime compilation when the project is created. Diese Option wird in ASP.net Core 3,1 und höher unterstützt.This option is supported in ASP.NET Core 3.1 and later.

Erstellen Sie im Dialogfeld neue ASP.net Core Webanwendung erstellen Folgendes:In the Create a new ASP.NET Core web application dialog:

  1. Wählen Sie entweder die Projektvorlage Webanwendung oder Webanwendung (Model-View-Controller) aus.Select either the Web Application or the Web Application (Model-View-Controller) project template.
  2. Aktivieren Sie das Kontrollkästchen Razor Lauf Zeit Kompilierung aktivieren .Select the Enable Razor runtime compilation check box.

Aktivieren der Lauf Zeit Kompilierung in einem vorhandenen ProjektEnable runtime compilation in an existing project

So aktivieren Sie die Lauf Zeit Kompilierung für alle Umgebungen in einem vorhandenen Projekt:To enable runtime compilation for all environments in an existing project:

  1. Installieren Sie Microsoft. aspnetcore. MVC. Razor . Runtimecompilation -nuget-Paket.Install the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package.

  2. Aktualisieren Sie die Startup.ConfigureServices-Methode des Projekts so, dass diese einen Aufruf von AddRazorRuntimeCompilation enthält.Update the project's Startup.ConfigureServices method to include a call to AddRazorRuntimeCompilation. Zum Beispiel:For example:

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

Bedingte Aktivierung der Lauf Zeit Kompilierung in einem vorhandenen ProjektConditionally enable runtime compilation in an existing project

Die Laufzeitkompilierung kann so aktiviert werden, dass sie nur für die lokale Entwicklung verfügbar ist.Runtime compilation can be enabled such that it's only available for local development. Eine bedingte Aktivierung auf diese Weise stellt für die veröffentlichte Ausgabe Folgendes sicher:Conditionally enabling in this manner ensures that the published output:

  • Es werden kompilierte Ansichten verwendet.Uses compiled views.
  • Dateiüberwachungselemente in der Produktionsumgebung werden nicht aktiviert.Doesn't enable file watchers in production.

So aktivieren Sie die Lauf Zeit Kompilierung nur in der Entwicklungsumgebung:To enable runtime compilation only in the Development environment:

  1. Installieren Sie Microsoft. aspnetcore. MVC. Razor . Runtimecompilation -nuget-Paket.Install the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package.
  2. Ändern Sie den Abschnitt Start Profil environmentVariables in launchSettings.js :Modify the launch profile environmentVariables section in launchSettings.json :
    • Überprüfen ASPNETCORE_ENVIRONMENT ist auf festgelegt "Development" .Verify ASPNETCORE_ENVIRONMENT is set to "Development".
    • Legen Sie ASPNETCORE_HOSTINGSTARTUPASSEMBLIES auf "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" fest.Set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES to "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Im folgenden Beispiel ist die Lauf Zeit Kompilierung in der Entwicklungsumgebung für die IIS Express RazorPagesApp Start Profile und aktiviert:In the following example, runtime compilation is enabled in the Development environment for the IIS Express and RazorPagesApp launch profiles:

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

In der-Klasse des Projekts sind keine Codeänderungen erforderlich Startup .No code changes are needed in the project's Startup class. Zur Laufzeit sucht ASP.net Core nach einem hostingstartup-Attribut auf Assemblyebene in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .At runtime, ASP.NET Core searches for an assembly-level HostingStartup attribute in Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. Das- HostingStartup Attribut gibt den auszuführenden App-Startcode an.The HostingStartup attribute specifies the app startup code to execute. Dieser Startcode ermöglicht die Lauf Zeit Kompilierung.That startup code enables runtime compilation.

Aktivieren der Lauf Zeit Kompilierung für eine Razor KlassenbibliothekEnable runtime compilation for a Razor Class Library

Stellen Sie sich ein Szenario vor, in dem ein Razor Seiten Projekt auf eine Razor Klassenbibliothek (RCL) mit dem Namen myclasslib verweist.Consider a scenario in which a Razor Pages project references a Razor Class Library (RCL) named MyClassLib . Die RCL enthält eine _Layout. cshtml -Datei, die von allen MVC-und Pages-Projekten Ihres Teams genutzt wird Razor .The RCL contains a _Layout.cshtml file that all of your team's MVC and Razor Pages projects consume. Sie möchten die Runtime-Kompilierung für die Datei _Layout. cshtml in dieser RCL aktivieren.You want to enable runtime compilation for the _Layout.cshtml file in that RCL. Nehmen Sie die folgenden Änderungen im Razor pages-Projekt vor:Make the following changes in the Razor Pages project:

  1. Aktivieren Sie die Lauf Zeit Kompilierung mit den Anweisungen unter bedingt Aktivieren der Lauf Zeit Kompilierung in einem vorhandenen Projekt.Enable runtime compilation with the instructions at Conditionally enable runtime compilation in an existing project.

  2. Konfigurieren Sie die Optionen für die Lauf Zeit Kompilierung in Startup.ConfigureServices :Configure the runtime compilation options 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));
        });
    }
    

    Im vorangehenden Code wird ein absoluter Pfad zur myclasslib -RCL erstellt.In the preceding code, an absolute path to the MyClassLib RCL is constructed. Die physicalfileprovider-API wird verwendet, um Verzeichnisse und Dateien in diesem absoluten Pfad zu suchen.The PhysicalFileProvider API is used to locate directories and files at that absolute path. Schließlich wird die PhysicalFileProvider Instanz einer Datei Anbieter Auflistung hinzugefügt, die den Zugriff auf die cshtml -Dateien der RCL ermöglicht.Finally, the PhysicalFileProvider instance is added to a file providers collection, which allows access to the RCL's .cshtml files.

Zusätzliche RessourcenAdditional resources

RazorDateien mit der Erweiterung . cshtml werden zum Zeitpunkt der Erstellung und Veröffentlichung mit dem Razor SDKkompiliert.Razor files with a .cshtml extension are compiled at both build and publish time using the Razor SDK. Die Laufzeitkompilierung kann optional aktiviert werden, indem Ihre Anwendung konfiguriert wird.Runtime compilation may be optionally enabled by configuring your application.

Razor NeuauflageRazor compilation

Kompilierzeit-und Veröffentlichungszeit Kompilierung von Razor Dateien wird vom SDK standardmäßig aktiviert Razor .Build-time and publish-time compilation of Razor files is enabled by default by the Razor SDK. Wenn diese Option aktiviert ist, ergänzt die Lauf Zeit Kompilierung die Kompilierungs Kompilierung, sodass Razor Dateien aktualisiert werden können, wenn Sie bearbeitet werden.When enabled, runtime compilation complements build-time compilation, allowing Razor files to be updated if they're edited.

LaufzeitkompilierungRuntime compilation

So aktivieren Sie die Laufzeitkompilierung für alle Umgebungen und Konfigurationsmodi:To enable runtime compilation for all environments and configuration modes:

  1. Installieren Sie Microsoft. aspnetcore. MVC. Razor . Runtimecompilation -nuget-Paket.Install the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet package.

  2. Aktualisieren Sie die Startup.ConfigureServices-Methode des Projekts so, dass diese einen Aufruf von AddRazorRuntimeCompilation enthält.Update the project's Startup.ConfigureServices method to include a call to AddRazorRuntimeCompilation. Zum Beispiel:For example:

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

Bedingte Aktivierung der LaufzeitkompilierungConditionally enable runtime compilation

Die Laufzeitkompilierung kann so aktiviert werden, dass sie nur für die lokale Entwicklung verfügbar ist.Runtime compilation can be enabled such that it's only available for local development. Eine bedingte Aktivierung auf diese Weise stellt für die veröffentlichte Ausgabe Folgendes sicher:Conditionally enabling in this manner ensures that the published output:

  • Es werden kompilierte Ansichten verwendet.Uses compiled views.
  • Die Größe ist geringer.Is smaller in size.
  • Dateiüberwachungselemente in der Produktionsumgebung werden nicht aktiviert.Doesn't enable file watchers in production.

So aktivieren Sie die Laufzeitkompilierung basierend auf Umgebung und Konfigurationsmodus:To enable runtime compilation based on the environment and configuration mode:

  1. Verweisen Sie bedingt auf Microsoft. aspnetcore. MVC. Razor . Runtimecompilation -Paket basierend auf dem aktiven Configuration Wert:Conditionally reference the Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation package based on the active Configuration value:

    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" Condition="'$(Configuration)' == 'Debug'" />
    
  2. Aktualisieren Sie die Startup.ConfigureServices-Methode des Projekts so, dass diese einen Aufruf von AddRazorRuntimeCompilation enthält.Update the project's Startup.ConfigureServices method to include a call to AddRazorRuntimeCompilation. Führen Sie AddRazorRuntimeCompilation bedingt so aus, dass die Ausführung nur dann im Debugmodus erfolgt, wenn die ASPNETCORE_ENVIRONMENT-Variable auf Development festgelegt ist:Conditionally execute AddRazorRuntimeCompilation such that it only runs in Debug mode when the ASPNETCORE_ENVIRONMENT variable is set to Development:

    public class Startup
    {
        public Startup(IConfiguration configuration, IWebHostEnvironment env)
        {
            Configuration = configuration;
            Env = env;
        }
    
        public IWebHostEnvironment Env { get; set; }
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            IMvcBuilder builder = services.AddRazorPages();
    
    #if DEBUG
                if (Env.IsDevelopment())
                {
                    builder.AddRazorRuntimeCompilation();
                }
    #endif
        }
    
        public void Configure(IApplicationBuilder app)
        {
            if (Env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
    

Zusätzliche RessourcenAdditional resources

Eine Razor Datei wird zur Laufzeit kompiliert, wenn die zugehörige Razor Seite oder MVC-Ansicht aufgerufen wird.A Razor file is compiled at runtime, when the associated Razor Page or MVC view is invoked. RazorDateien werden zum Zeitpunkt der Erstellung und Veröffentlichung mit dem Razor SDKkompiliert.Razor files are compiled at both build and publish time using the Razor SDK.

Razor NeuauflageRazor compilation

Build-und Veröffentlichungszeit Kompilierung von Razor Dateien wird vom SDK standardmäßig aktiviert Razor .Build- and publish-time compilation of Razor files is enabled by default by the Razor SDK. Das Bearbeiten Razor von Dateien nach ihrer Aktualisierung wird zur Buildzeit unterstützt.Editing Razor files after they're updated is supported at build time. Standardmäßig werden nur die Dateien für kompilierte Views.dll und keine cshtml -Dateien oder Verweise, die zum Kompilieren von Razor Dateien erforderlich sind, mit Ihrer APP bereitgestellt.By default, only the compiled Views.dll and no .cshtml files or references assemblies required to compile Razor files are deployed with your app.

Wichtig

Das Vorkompilierungstool ist veraltet und wird in ASP.NET Core 3.0 entfernt.The precompilation tool has been deprecated, and will be removed in ASP.NET Core 3.0. Es wird empfohlen, zu Razor SDKzu migrieren.We recommend migrating to Razor Sdk.

Das Razor SDK ist nur wirksam, wenn keine vorkompilierungs spezifischen Eigenschaften in der Projektdatei festgelegt sind.The Razor SDK is effective only when no precompilation-specific properties are set in the project file. Wenn Sie z. b. die-Eigenschaft der csproj -Datei festlegen, wird MvcRazorCompileOnPublish true das Razor SDK deaktiviert.For instance, setting the .csproj file's MvcRazorCompileOnPublish property to true disables the Razor SDK.

LaufzeitkompilierungRuntime compilation

Die Kompilierung der Kompilierzeit wird durch die Lauf Zeit Kompilierung von Razor Dateien ergänzt.Build-time compilation is supplemented by runtime compilation of Razor files. ASP.net Core MVC kompiliert Dateien neu, Razor Wenn sich der Inhalt einer cshtml -Datei ändert.ASP.NET Core MVC will recompile Razor files when the contents of a .cshtml file change.

Zusätzliche RessourcenAdditional resources