Razorkompilace souborů v ASP.NET Core

Autor: Rick Anderson

Razorsoubory s příponou . cshtml jsou kompilovány jak při sestavování, tak při publikování pomocí Razor sady SDK. Kompilace za běhu může být volitelně povolena konfigurací projektu.

Razor kompilace

RazorSada SDK ve výchozím nastavení povoluje kompilaci souborů pro čas sestavení a publikování Razor . Pokud je povoleno, kompilace za běhu doplňuje kompilaci při sestavení a umožňuje Razor aktualizovat soubory, pokud jsou upravovány.

Povolit kompilaci za běhu při vytváření projektu

RazorŠablony projektů stránky a MVC obsahují možnost Povolit kompilaci za běhu při vytvoření projektu. tato možnost je podporovaná v ASP.NET Core 3,1 a novějších.

v dialogovém okně vytvořit novou ASP.NET Core webovou aplikaci :

  1. Vyberte šablonu projektu webová aplikace nebo Webová aplikace (model-zobrazení-kontroler) .
  2. Zaškrtněte políčko Povolit Razor kompilaci za běhu .

Povolit kompilaci za běhu v existujícím projektu

Povolení kompilace za běhu pro všechna prostředí v existujícím projektu:

  1. Nainstalujte Microsoft. AspNetCore. Mvc. Razor . balíček NuGet RuntimeCompilation

  2. Aktualizujte metodu projektu Startup.ConfigureServices tak, aby zahrnovala volání AddRazorRuntimeCompilation . Například:

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

Podmíněně povolit kompilaci za běhu v existujícím projektu

Je možné povolit kompilaci za běhu, aby byla dostupná pouze pro místní vývoj. Podmíněné povolení tímto způsobem zajistí, že publikovaný výstup:

  • Používá kompilovaná zobrazení.
  • Nepovoluje sledovací procesy souborů v produkčním prostředí.

Chcete-li povolit kompilaci za běhu pouze ve vývojovém prostředí:

  1. Nainstalujte Microsoft. AspNetCore. Mvc. Razor . balíček NuGet RuntimeCompilation
  2. Upravte část spouštěcí profil environmentVariables v launchSettings.jsdne:
    • Ověřte ASPNETCORE_ENVIRONMENT , že je nastavené na "Development" .
    • Nastavte ASPNETCORE_HOSTINGSTARTUPASSEMBLIES na "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" .

V následujícím příkladu je kompilace modulu runtime ve vývojovém prostředí povolena pro IIS Express RazorPagesApp profily spuštění a:

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

Ve třídě projektu nejsou potřeba žádné změny kódu Startup . v době běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation . HostingStartupAtribut určuje spouštěcí kód aplikace, který se má spustit. Tento spouštěcí kód umožňuje kompilaci za běhu.

Povolit kompilaci za běhu pro Razor knihovnu tříd

Vezměte v úvahu scénář, ve kterém se Razor projekt stránky odkazuje na Razor knihovnu tříd (RCL) s názvem MyClassLib. RCL obsahuje soubor _Layout. cshtml , který využívá všechny projekty MVC a Razor Pages vašeho týmu. Chcete povolit kompilaci za běhu pro soubor _Layout. cshtml v tomto RCL. Proveďte následující změny v Razor projektu stránky:

  1. Povolit kompilaci za běhu pomocí instrukcí v podmíněně povolit kompilaci za běhu v existujícím projektu.

  2. Nakonfigurujte možnosti kompilace za běhu v 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));
        });
    }
    

    V předchozím kódu je vytvořena absolutní cesta k MyClassLib RCL. Rozhraní PhysicalFileProvider API se používá k nalezení adresářů a souborů v této absolutní cestě. Nakonec PhysicalFileProvider je instance přidána do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům . cshtml RCL.

Další zdroje informací

Razorsoubory s příponou . cshtml jsou kompilovány jak při sestavování, tak při publikování pomocí Razor sady SDK. Kompilace za běhu může být volitelně povolena konfigurací projektu.

Razor kompilace

RazorSada SDK ve výchozím nastavení povoluje kompilaci souborů pro čas sestavení a publikování Razor . Pokud je povoleno, kompilace za běhu doplňuje kompilaci při sestavení a umožňuje Razor aktualizovat soubory, pokud jsou upravovány.

Povolit kompilaci za běhu při vytváření projektu

RazorŠablony projektů stránky a MVC obsahují možnost Povolit kompilaci za běhu při vytvoření projektu. tato možnost je podporovaná v ASP.NET Core 3,1 a novějších.

v dialogovém okně vytvořit novou ASP.NET Core webovou aplikaci :

  1. Vyberte šablonu projektu webová aplikace nebo Webová aplikace (model-zobrazení-kontroler) .
  2. Zaškrtněte políčko Povolit Razor kompilaci za běhu .

Povolit kompilaci za běhu v existujícím projektu

Povolení kompilace za běhu pro všechna prostředí v existujícím projektu:

  1. Nainstalujte Microsoft. AspNetCore. Mvc. Razor . balíček NuGet RuntimeCompilation

  2. Aktualizujte metodu projektu Startup.ConfigureServices tak, aby zahrnovala volání AddRazorRuntimeCompilation . Například:

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

Podmíněně povolit kompilaci za běhu v existujícím projektu

Je možné povolit kompilaci za běhu, aby byla dostupná pouze pro místní vývoj. Podmíněné povolení tímto způsobem zajistí, že publikovaný výstup:

  • Používá kompilovaná zobrazení.
  • Nepovoluje sledovací procesy souborů v produkčním prostředí.

Chcete-li povolit kompilaci za běhu pouze ve vývojovém prostředí:

  1. Nainstalujte Microsoft. AspNetCore. Mvc. Razor . balíček NuGet RuntimeCompilation
  2. Upravte část spouštěcí profil environmentVariables v launchSettings.jsdne:
    • Ověřte ASPNETCORE_ENVIRONMENT , že je nastavené na "Development" .
    • Nastavte ASPNETCORE_HOSTINGSTARTUPASSEMBLIES na "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" .

V následujícím příkladu je kompilace modulu runtime ve vývojovém prostředí povolena pro IIS Express RazorPagesApp profily spuštění a:

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

Ve třídě projektu nejsou potřeba žádné změny kódu Startup . v době běhu ASP.NET Core vyhledá atribut HostingStartup na úrovni sestavení v Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation . HostingStartupAtribut určuje spouštěcí kód aplikace, který se má spustit. Tento spouštěcí kód umožňuje kompilaci za běhu.

Povolit kompilaci za běhu pro Razor knihovnu tříd

Vezměte v úvahu scénář, ve kterém se Razor projekt stránky odkazuje na Razor knihovnu tříd (RCL) s názvem MyClassLib. RCL obsahuje soubor _Layout. cshtml , který využívá všechny projekty MVC a Razor Pages vašeho týmu. Chcete povolit kompilaci za běhu pro soubor _Layout. cshtml v tomto RCL. Proveďte následující změny v Razor projektu stránky:

  1. Povolit kompilaci za běhu pomocí instrukcí v podmíněně povolit kompilaci za běhu v existujícím projektu.

  2. Nakonfigurujte možnosti kompilace za běhu v 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));
        });
    }
    

    V předchozím kódu je vytvořena absolutní cesta k MyClassLib RCL. Rozhraní PhysicalFileProvider API se používá k nalezení adresářů a souborů v této absolutní cestě. Nakonec PhysicalFileProvider je instance přidána do kolekce zprostředkovatelů souborů, která umožňuje přístup k souborům . cshtml RCL.

Další zdroje informací

RazorSoubor je zkompilován za běhu, když Razor je vyvolána přidružená stránka nebo zobrazení MVC. Razorsoubory jsou kompilovány jak při sestavování, tak při publikování pomocí Razor sady SDK.

Razor Kompilace

Kompilace souborů v době sestavení a publikování je ve výchozím nastavení povolená Razor sadou Razor SDK. Úpravy Razor souborů po jejich aktualizaci se podporují v době sestavení. Ve výchozím nastavení jsou s aplikací nasazeny pouzeViews.dll soubory a žádná sestavení .cshtml nebo odkazy potřebné ke kompilaci Razor souborů.

Důležité

Nástroj předkompilace je zastaralý a ve ASP.NET Core 3.0 bude odebrán. Doporučujeme migrovat na Razor sadu SDK.

Sada SDK je efektivní pouze v případě, že nejsou v souboru projektu nastaveny žádné vlastnosti specifické Razor pro předkompilaci. Nastavením vlastnosti souboru .csproj například MvcRazorCompileOnPublish true zakážete sadu Razor SDK.

Kompilace modulu runtime

Kompilace v době sestavení je doplněna kompilací souborů za Razor běhu. ASP.NET Core MVC překompiluje soubory při změně obsahu Razor souboru .cshtml.

Další materiály