.NET Core 3.0: visualizações Razor não recompilam automaticamente na mudança


100

De acordo com a documentação , as visualizações do Razor devem, por padrão, recompilar na mudança em ambientes locais para ASP.NET Core 3.0.

No entanto, meu projeto não faz isso localmente. Se eu alterar uma visualização e atualizar quando estiver depurando localmente, a alteração não será refletida. Tenho que interromper a solução, executar novamente e ver a mudança.

Estou fazendo isso em um modelo de aplicativo da Web ASP.NET Core padrão no Visual Studio 2019 com ASP.NET Core 3.0.0 Preview 2 usando páginas do Razor. Alguma ideia se eu preciso mudar as configurações para habilitar este recurso?

ATUALIZAÇÃO DE NOVEMBRO DE 2019 PARA O 3.0 FULL RELEASE:

Esta questão ainda recebe muitos pontos de vista. Algumas respostas citadas para adicionar

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

Para sua ConfigureServices()função Startup.csapós adicionar o Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpacote NuGet. No meu caso, estou usando apenas o Razor Pages, então não ligo AddControllersWithViews(). Em vez disso, isso funcionou para mim:

services.AddRazorPages().AddRazorRuntimeCompilation();

As visualizações do razor .cshtml são recompiladas. Você pode verificar? Tente adicionar um <h1> Teste </h1>. Inicie o aplicativo, carregue a página. você deve ver "Teste". Em seguida, mude para <h1> Foo </h1>. Você deverá ver "Foo".
— John-Luke Laue

Não funciona! Tenho que parar e iniciar a solução. Capturado aqui: drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - Tentei em várias máquinas com o modelo Razor Pages.
— tarun713 de

Você está executando um Mac ou PC ou Linux? Além disso, pode ser um problema com a visualização. Você pode tentar usar asp.net core 2.x?
— John-Luke Laue

PC, visualização do Visual Studio 2019. Tentei com 2.2 e funciona! Portanto, há algo que mudou no 3.0.
— tarun713

Estou em um .net core 3 / VS totalmente atualizado e tive que adicionar .AddRazorRuntimeCompilation();Obrigado!
— duckwizzle de

Respostas:


61

OK, parece que ainda não é compatível :(

Compilação de tempo de execução removida Como consequência da limpeza da estrutura compartilhada do ASP.NET Core para não depender do Roslyn, o suporte para compilação de tempo de execução de páginas e visualizações também foi removido nesta versão de visualização. Em vez disso, a compilação de páginas e visualizações é realizada no momento da construção. Em uma atualização de visualização futura, forneceremos pacotes NuGet para habilitar opcionalmente o suporte à compilação em tempo de execução em um aplicativo.

Você pode ler mais sobre o problema aqui https://github.com/aspnet/Announcements/issues/343

Os aplicativos que requerem compilação em tempo de execução ou recompilação de arquivos Razor devem:

  • Adicione uma referência ao Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpacote. Ele estará disponível como parte da versão 3.0.0-preview3 .
  • Atualize o aplicativo ConfigureServicespara incluir uma chamada para AddMvcRazorRuntimeCompilation:

11
AddMvcRazorRuntimeCompilationé AddRazorRuntimeCompilationcom ASP.Net Core 3.0 Preview 4
— DB Fred

57

Para a versão de lançamento do ASP.NET Core 3:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

Também pode ser habilitado condicionalmente apenas para desenvolvimento local, citado no link:

A compilação de tempo de execução pode ser habilitada de forma que esteja disponível apenas para desenvolvimento local. A ativação condicional dessa maneira garante que a saída publicada:

Usa visualizações compiladas.
É menor em tamanho.
Não habilita observadores de arquivos em produção.

   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
    }

Dica sobre as versões do pacote nuget relacionadas à versão do núcleo .Net. No caso de você usar .Net Core 3.0, você não pode selecionar as versões posteriores deste pacote Nuget. Mas a versão 3.0.0 do Nuget lib funciona com .Net Core 3.0. Se você usa .Net Core 3.1, pode selecionar versões mais recentes.
— Rasgou Aurstad em

38

Para obter a compilação da visualização do tempo de execução em ASP.NET Core3

  1. Referência Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. Ligar services.AddMvc().AddRazorRuntimeCompilation()
  3. Remova Microsoft.VisualStudio.Web.CodeGeneration.Designse houver uma incompatibilidade de versão no Microsoft.CodeAnalysis.Commonpacote

2
Apenas uma dica para outros: ao usar o Nuget, marque / marque a caixa "pré-lançamento".
— GeoffM

Existe uma maneira de evitar que os ativos sejam implantados na produção? Tentei algumas combinações de PrivateAssets em PackageReference, mas não parece funcionar.
— Chet

No Core 2.2 razor options tem FileProviders e funciona mesmo sem qualquer recompilação. Apenas edite cshtml e voila. No núcleo 3, essa propriedade foi removida. :( github.com/aspnet/AspNetCore/issues/14572
— dariol

2
+1 porque remover o pacote Microsoft.VisualStudio.Web.CodeGeneration.Design era o molho secreto que em nenhum outro lugar menciona.
— tkburbidge

@tkburbidge Acabei de ter esse problema com o pacote também. Curiosamente, eu tinha duas linhas que eram exatamente iguais, consecutivas. Eu removi ambos e pude compilar. Ainda mais estranhamente , coloquei as linhas de volta no lugar e ainda fui capaz de compilar.
— Lynn Crumbling,

26

A compilação em tempo de execução é ativada usando o Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpacote. Para habilitar a compilação em tempo de execução, os aplicativos devem:

  1. Instale o Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpacote NuGet.

  2. Atualize o Startup.ConfigureServicesmétodo do projeto para incluir uma chamada para AddRazorRuntimeCompilation:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0


14

Para obter a compilação de visualizações do Razor no ASP.NET Core 3.1:

  1. Instale o Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationpacote NuGet.
  2. Atualize o Startup.ConfigureServicesmétodo do projeto para incluir uma chamada para AddRazorRuntimeCompilation.
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    Compilação do arquivo Razor no ASP.NET Core 3.1


12

Etapa 1: instale o pacote abaixo do NuGet Package Manager for Solution.

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Etapa 2: adicione o código abaixo no arquivo ConfigureServices of Startup.cs

services.AddControllersWithViews (). AddRazorRuntimeCompilation ();

Salve a página e atualize o navegador do cliente.

Se você estiver usando o Razor, adicione o código para services.AddRazorPages (). AddRazorRuntimeCompilation ();


7

No .NET Core 3.1, você precisa desabilitar a geração do views.dllarquivo.

  1. Adicione o código abaixo ao seu .csprojarquivo (na raiz do seu projeto):

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <UserSecretsId>...</UserSecretsId>
    
        <!-- add from this line: -->
        <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
        <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
        <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
        <RazorCompileOnBuild>false</RazorCompileOnBuild>
        <!-- to this line. -->
    
    </PropertyGroup>
    
  2. Instale o pacote abaixo do Gerenciador de Pacotes NuGet para a Solução.

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. Adicione o código abaixo ao ConfigureServicesmétodo do seu Startup.csarquivo:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    Ou

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    Ou

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

Depois disso, publique novamente e execute-o. Vai funcionar.



2

A maneira mais simples de configurar a compilação de tempo de execução apenas para desenvolvimento local é atualizar os perfis de inicialização em launchSettings.json. Este método não requer alterações de código para configurar um projeto que está sendo executado localmente (não afetará sua produção).

Veja a documentação oficial :

  1. Instale o pacote NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .
  2. Modifique a seção environmentVariables do perfil de inicialização em launchSettings.json:
    • Verifique se ASPNETCORE_ENVIRONMENTestá definido como "Desenvolvimento".
    • Defina ASPNETCORE_HOSTINGSTARTUPASSEMBLIEScomo "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

Exemplo:

{
  "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"
      }
    }
  }
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.