Razorcompilación de archivos en ASP.NET Core
Por Rick Anderson
RazorLos archivos con una extensión .cshtml se compilan en tiempo de compilación y publicación mediante el Razor SDK. La compilación en tiempo de ejecución puede habilitarse opcionalmente configurando el proyecto.
Razor Compilación
El SDK habilita de forma predeterminada la compilación en tiempo de compilación y en tiempo Razor de publicación de Razor archivos. Cuando está habilitada, la compilación en tiempo de ejecución complementa la compilación en tiempo de compilación, lo que permite actualizar los archivos Razor si se editan.
Habilitación de la compilación en tiempo de ejecución durante la creación del proyecto
Las Razor plantillas de proyecto pages y MVC incluyen una opción para habilitar la compilación en tiempo de ejecución cuando se crea el proyecto. Esta opción se admite en ASP.NET Core 3.1 y versiones posteriores.
En el cuadro de diálogo Crear ASP.NET Core aplicación web:
- Seleccione la plantilla de proyecto Aplicación web o Aplicación web (Modelo-Vista-Controlador).
- Active la casilla Habilitar Razor compilación en tiempo de ejecución.
Habilitación de la compilación en tiempo de ejecución en un proyecto existente
Para habilitar la compilación en tiempo de ejecución para todos los entornos de un proyecto existente:
Instale Microsoft.AspNetCore.Mvc. Razor . RuntimeCompilation NuGet paquete.
Actualizar el método
Startup.ConfigureServicesdel proyecto para incluir una llamada a AddRazorRuntimeCompilation. Por ejemplo:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Habilitación condicional de la compilación en tiempo de ejecución en un proyecto existente
La compilación en tiempo de ejecución se puede habilitar para que solo esté disponible para el desarrollo local. Este modo de habilitación condicional garantiza que la salida publicada:
- Usa vistas precompiladas.
- No habilita monitores de archivos en producción.
Para habilitar la compilación en tiempo de ejecución solo en el entorno de desarrollo:
- Instale Microsoft.AspNetCore.Mvc. Razor . RuntimeCompilation NuGet paquete.
- Modifique la sección del
environmentVariablesperfil de iniciolaunchSettings.js en:- Compruebe
ASPNETCORE_ENVIRONMENTque está establecido en"Development". - Establezca
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESen"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".
- Compruebe
En el ejemplo siguiente, la compilación en tiempo de ejecución está habilitada en el entorno de desarrollo para los IIS Express perfiles de RazorPagesApp inicio y :
{
"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"
}
}
}
}
No se necesita ningún cambio de código en la clase del Startup proyecto. En tiempo de ASP.NET Core, busca un atributo HostingStartup de nivel de ensamblado en Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation . El HostingStartup atributo especifica el código de inicio de la aplicación que se ejecutará. Ese código de inicio habilita la compilación en tiempo de ejecución.
Habilitación de la compilación en tiempo de ejecución para una Razor biblioteca de clases
Considere un escenario en el que un proyecto de Pages hace referencia a una biblioteca de Razor Razor clases (RCL) denominada MyClassLib. La RCL contiene un archivo _Layout.cshtml que consumen todos los proyectos MVC y Razor Pages de su equipo. Quiere habilitar la compilación en tiempo de ejecución para el _Layout.cshtml en esa RCL. Realice los siguientes cambios en el Razor proyecto Pages:
Habilite la compilación en tiempo de ejecución con las instrucciones de Habilitación condicional de la compilación en tiempo de ejecución en un proyecto existente.
Configure las opciones de compilación en tiempo de ejecución en
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)); }); }En el código anterior, se construye una ruta de acceso absoluta a la RCL MyClassLib. La API PhysicalFileProvider se usa para buscar directorios y archivos en esa ruta de acceso absoluta. Por último, la instancia se agrega a una colección de proveedores de archivos, que permite el acceso a los archivos
PhysicalFileProvider.cshtml de la RCL.
Recursos adicionales
RazorLos archivos con una extensión .cshtml se compilan en tiempo de compilación y publicación mediante el Razor SDK. La compilación en tiempo de ejecución puede habilitarse opcionalmente configurando el proyecto.
Razor Compilación
El SDK habilita de forma predeterminada la compilación en tiempo de compilación y en tiempo Razor de publicación de Razor archivos. Cuando está habilitada, la compilación en tiempo de ejecución complementa la compilación en tiempo de compilación, lo que permite actualizar los archivos Razor si se editan.
Habilitación de la compilación en tiempo de ejecución durante la creación del proyecto
Las Razor plantillas de proyecto pages y MVC incluyen una opción para habilitar la compilación en tiempo de ejecución cuando se crea el proyecto. Esta opción se admite en ASP.NET Core 3.1 y versiones posteriores.
En el cuadro de diálogo Crear ASP.NET Core aplicación web:
- Seleccione la plantilla de proyecto Aplicación web o Aplicación web (Modelo-Vista-Controlador).
- Active la casilla Habilitar Razor compilación en tiempo de ejecución.
Habilitación de la compilación en tiempo de ejecución en un proyecto existente
Para habilitar la compilación en tiempo de ejecución para todos los entornos de un proyecto existente:
Instale Microsoft.AspNetCore.Mvc. Razor . RuntimeCompilation NuGet paquete.
Actualizar el método
Startup.ConfigureServicesdel proyecto para incluir una llamada a AddRazorRuntimeCompilation. Por ejemplo:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Habilitación condicional de la compilación en tiempo de ejecución en un proyecto existente
La compilación en tiempo de ejecución se puede habilitar para que solo esté disponible para el desarrollo local. Este modo de habilitación condicional garantiza que la salida publicada:
- Usa vistas precompiladas.
- No habilita monitores de archivos en producción.
Para habilitar la compilación en tiempo de ejecución solo en el entorno de desarrollo:
- Instale Microsoft.AspNetCore.Mvc. Razor . RuntimeCompilation NuGet paquete.
- Modifique la sección del
environmentVariablesperfil de iniciolaunchSettings.js en:- Compruebe
ASPNETCORE_ENVIRONMENTque está establecido en"Development". - Establezca
ASPNETCORE_HOSTINGSTARTUPASSEMBLIESen"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".
- Compruebe
En el ejemplo siguiente, la compilación en tiempo de ejecución está habilitada en el entorno de desarrollo para los IIS Express perfiles de RazorPagesApp inicio y :
{
"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"
}
}
}
}
No se necesita ningún cambio de código en la clase del Startup proyecto. En tiempo de ASP.NET Core, busca un atributo HostingStartup de nivel de ensamblado en Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation . El HostingStartup atributo especifica el código de inicio de la aplicación que se ejecutará. Ese código de inicio habilita la compilación en tiempo de ejecución.
Habilitación de la compilación en tiempo de ejecución para una Razor biblioteca de clases
Considere un escenario en el que un proyecto de Pages hace referencia a una biblioteca de Razor Razor clases (RCL) denominada MyClassLib. La RCL contiene un archivo _Layout.cshtml que consumen todos los proyectos MVC y Razor Pages de su equipo. Quiere habilitar la compilación en tiempo de ejecución para el _Layout.cshtml en esa RCL. Realice los siguientes cambios en el Razor proyecto Pages:
Habilite la compilación en tiempo de ejecución con las instrucciones de Habilitación condicional de la compilación en tiempo de ejecución en un proyecto existente.
Configure las opciones de compilación en tiempo de ejecución en
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)); }); }En el código anterior, se construye una ruta de acceso absoluta a la RCL MyClassLib. La API PhysicalFileProvider se usa para buscar directorios y archivos en esa ruta de acceso absoluta. Por último, la instancia se agrega a una colección de proveedores de archivos, que permite el acceso a los archivos
PhysicalFileProvider.cshtml de la RCL.
Recursos adicionales
Un Razor archivo se compila en tiempo de ejecución, cuando se invoca la vista page o MVC Razor asociada. RazorLos archivos se compilan en tiempo de compilación y publicación mediante el Razor SDK.
Razor Compilación
El SDK habilita de forma predeterminada la compilación en tiempo de compilación y en tiempo de Razor publicación de Razor archivos. La Razor edición de archivos después de actualizarse se admite en tiempo de compilación. De forma predeterminada, solo los ensamblados Views.dll compilación y ningún archivo .cshtml ni ensamblados de referencia necesarios para compilar archivos se implementan Razor con una aplicación.
Importante
La herramienta de precompilación está en desuso y se eliminará en ASP.NET Core 3.0. Se recomienda migrar a Razor Sdk.
El SDK solo es efectivo cuando no se establece ninguna propiedad específica de la Razor precompilación en el archivo del proyecto. Por ejemplo, al establecer la propiedad del archivo .csproj MvcRazorCompileOnPublish en se deshabilita el true Razor SDK.
Compilación en tiempo de ejecución
La compilación en tiempo de compilación se complementa con la compilación en tiempo de ejecución de Razor archivos. ASP.NET Core MVC volverá a compilar los archivos cuando cambie el contenido de un Razor archivo .cshtml.