Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Razorarquivos com uma .cshtml extensão são compilados na fase de construção e publicação usando o Razor SDK. A compilação em tempo de execução pode ser ativada opcionalmente configurando o projeto.
Observação
Compilação em tempo de execução:
- Não é suportado para Razor componentes de Blazor aplicações.
- Não suporta diretivas de uso global.
- Não suporta o uso implícito de diretivas.
- Desativa o .NET Hot Reload.
- É recomendado para desenvolvimento, não para produção.
Razor compilação
A compilação de ficheiros em tempo de construção e em tempo de publicação está habilitada por padrão pelo SDK RazorRazor. Quando ativada, a compilação em tempo de execução complementa a compilação em tempo de construção, permitindo que os arquivos Razor sejam atualizados se forem editados enquanto o aplicativo está em execução.
A atualização Razor de visualizações e Razor Páginas durante o desenvolvimento enquanto a aplicação está em execução também é suportada usando o .NET Hot Reload.
Observação
Quando habilitada, a compilação em tempo de execução desabilita o .NET Hot Reload. Recomendamos o uso do Hot Reload em vez da compilação em tempo de execução durante o desenvolvimento.
Habilitar a compilação em tempo de execução para todos os ambientes
Para habilitar a compilação em tempo de execução para todos os ambientes:
Instale o pacote NuGet Razor.
Ligue AddRazorRuntimeCompilation em
Program.cs:var builder = WebApplication.CreateBuilder(args); builder.Services.AddRazorPages() .AddRazorRuntimeCompilation();
Ativar a compilação em tempo de execução de forma condicional
A compilação de tempo de execução pode ser habilitada condicionalmente, o que garante que a saída publicada:
- Usa modos de exibição compilados.
- Não habilita observadores de arquivos em produção.
Para ativar a compilação em tempo de execução apenas para o ambiente Development:
Instale o pacote NuGet Razor.
Ligue para AddRazorRuntimeCompilation em
Program.csquando o ambiente atual estiver definido como Desenvolvimento.var builder = WebApplication.CreateBuilder(args); var mvcBuilder = builder.Services.AddRazorPages(); if (builder.Environment.IsDevelopment()) { mvcBuilder.AddRazorRuntimeCompilation(); }
A compilação de tempo de execução também pode ser habilitada com um assembly de inicialização de hospedagem. Para permitir a compilação em tempo de execução para perfis de início específicos no ambiente Development:
- Instale o pacote NuGet Razor.
- Modifique a seção de
environmentVariablesdo perfil de inicialização emlaunchSettings.json:Verifique se
ASPNETCORE_ENVIRONMENTestá definido como"Development".Defina
ASPNETCORE_HOSTINGSTARTUPASSEMBLIEScomo"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation". Por exemplo, o seguintelaunchSettings.jsonpermite a compilação de tempo de execução para os perfis de lançamentoViewCompilationSampleeIIS 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" } } } }
Com essa abordagem, nenhuma alteração de código é necessária no Program.cs. Durante a execução, o ASP.NET Core procura um atributo HostingStartup a nível de assembly no Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. O HostingStartup atributo especifica o código de inicialização do aplicativo a ser executado e esse código de inicialização permite a compilação em tempo de execução.
Habilitar a compilação em tempo de execução para uma biblioteca de Razor classes
Considere um cenário no qual um Razor projeto Pages faz referência a uma biblioteca deRazor classes (RCL) chamada MyClassLib. O RCL contém um _Layout.cshtml arquivo consumido por projetos MVC e Razor Pages. Para habilitar a compilação em tempo de execução para o arquivo _Layout.cshtml nesse RCL, faça as seguintes alterações no projeto Razor Pages:
Habilite a compilação de tempo de execução com as instruções em Habilitar compilação de tempo de execução condicionalmente.
Configure MvcRazorRuntimeCompilationOptions em
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)); });O código anterior cria um caminho absoluto para o MyClassLib RCL. A API PhysicalFileProvider é usada para localizar diretórios e arquivos nesse caminho absoluto. Finalmente, a instância
PhysicalFileProvideré adicionada à coleção de provedores de ficheiros, que permite o acesso aos ficheiros da.cshtmlRCL.
Recursos adicionais
Razorarquivos com uma .cshtml extensão são compilados na fase de construção e publicação usando o Razor SDK. A compilação de tempo de execução pode ser ativada opcionalmente configurando seu projeto.
Razor compilação
A compilação de ficheiros em tempo de construção e em tempo de publicação está habilitada por padrão pelo SDK RazorRazor. Quando habilitada, a compilação em tempo de execução complementa a compilação em tempo de construção, permitindo que os arquivos Razor sejam atualizados se forem editados.
Habilitar a compilação em tempo de execução na criação do projeto
Os Razor modelos de projeto Pages e MVC incluem uma opção para habilitar a compilação em tempo de execução quando o projeto é criado. Esta opção é suportada no ASP.NET Core 3.1 ou posterior.
Na caixa de diálogo Criar um novo aplicativo Web ASP.NET Core:
- Selecione o modelo de projeto Aplicativo Web ou Aplicativo Web (Model-View-Controller ).
- Marque a caixa de seleção "Ativar compilação em tempo de execução".
Habilitar a compilação de tempo de execução num projeto existente
Para habilitar a compilação em tempo de execução para todos os ambientes em um projeto existente:
Instale o pacote NuGet Razor.
Atualize o método do projeto
Startup.ConfigureServicespara incluir uma chamada para AddRazorRuntimeCompilation. Por exemplo:public void ConfigureServices(IServiceCollection services) { services.AddRazorPages() .AddRazorRuntimeCompilation(); // code omitted for brevity }
Ativar condicionalmente a compilação em tempo de execução num projeto existente
A compilação em tempo de execução pode ser habilitada de forma que esteja disponível apenas para desenvolvimento local. Ao habilitar de forma condicional desta forma, garante-se que o resultado publicado:
- Usa modos de exibição compilados.
- Não habilita observadores de arquivos em produção.
Para ativar a compilação em tempo de execução apenas no ambiente Development:
- Instale o pacote NuGet Razor.
- Modifique a seção de perfil
environmentVariablesde inicialização emlaunchSettings.json:- Verificar que
ASPNETCORE_ENVIRONMENTestá definido como"Development". - Defina
ASPNETCORE_HOSTINGSTARTUPASSEMBLIEScomo"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".
- Verificar que
No exemplo seguinte, a compilação em tempo de execução está ativada no Development ambiente para os perfis IIS Express e de lançamento 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"
}
}
}
}
Nenhuma alteração de código é necessária na classe do Startup projeto. Durante a execução, o ASP.NET Core procura um atributo HostingStartup a nível de assembly no Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. O HostingStartup atributo especifica o código de inicialização do aplicativo a ser executado. Esse código de inicialização permite a compilação em tempo de execução.
Habilitar a compilação em tempo de execução para uma biblioteca de Razor classes
Considere um cenário no qual um Razor projeto Pages faz referência a uma biblioteca deRazor classes (RCL) chamada MyClassLib. O RCL contém um _Layout.cshtml ficheiro que todos os projetos MVC e Razor Pages da sua equipa consomem. Você deseja ativar a compilação em tempo de execução para o arquivo _Layout.cshtml nesse RCL. Faça as seguintes alterações no Razor projeto Pages:
Habilite a compilação em tempo de execução com as instruções em Habilitar condicionalmente a compilação em tempo de execução em um projeto existente.
Configure as opções de compilação de tempo de execução em
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)); }); }No código anterior, um caminho absoluto para o RCL MyClassLib é construído. A API PhysicalFileProvider é usada para localizar diretórios e arquivos nesse caminho absoluto. Finalmente, a instância
PhysicalFileProvideré adicionada à coleção de provedores de ficheiros, que permite o acesso aos ficheiros da.cshtmlRCL.