A página .NET Core MVC não é atualizada após as alterações


111

Estou construindo um .NET Core MVC na versão mais recente 2.2. Tenho um problema ao fazer alterações no arquivo CSHTML e atualizar a página; minhas alterações não são refletidas no navegador. Tenho que reiniciar o projeto para ver minhas mudanças. Isso já vem acontecendo há algum tempo, então não tenho certeza de qual mudança causou esse problema.

Eu tentei usar o "Empty Cache and Hard Reload" do cromo, bem como outros navegadores, sem sucesso. Isso acontece no Windows e Mac usando o Visual Studio para Mac e o VS Code

Em um projeto padrão .Net Core ele funciona bem, então deve ser algo em meu projeto que mudou ao longo do caminho. Estou me perguntando por onde devo começar para depurar esse problema. Já tentei comentar quase tudo na minha Startup.cse Program.cssem resolução.


Estou encontrando a mesma MissingMethodException que você mencionou abaixo ... Você já descobriu isso? Se, você poderia responder à sua pergunta?
JohnOsborne de

Respostas:


59

Parece que houve uma mudança no ASP.NET Core 2.2 (e não consigo encontrar nenhum anúncio sobre essa mudança). Se você não estiver executando explicitamente no ambiente de 'Desenvolvimento', as Visualizações do Razor são compiladas e você não verá nenhuma alteração feita no .cshtml

No entanto, você pode desligar isso usando alguma configuração em sua classe de inicialização da seguinte maneira.

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);

Para ASP.NET Core 3.0 e superior, consulte a resposta de Alexander Christov .


1
Obrigado. No entanto, parece que quando eu habilito isso, faço uma alteração no html e, em seguida, atualizo, recebo a seguinte exceção: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Alguma ideia do que essa exceção significa? Todas as outras páginas carregam bem. Somente quando edito e
atualizo

3
Isso funcionou para mim. Para defini-lo dependendo do ambiente, adicione IHostingEnvironment ao método Startup e persista em uma propriedade. Em seguida, use algo comoservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious de

1
obrigado funcionou. No entanto, acho muito estranho e bobo que a Microsoft não anuncie oficialmente grandes mudanças como essa.
Code_Worm

@kevskree a mesma coisa está acontecendo comigo
JohnOsborne de

1
@Mayank Gupta: veja a resposta de Alexander Christov abaixo ( stackoverflow.com/a/57637903/198990 ). Sua resposta funcionou para mim (3.1).
Sandor Drieënhuizen

202

No ASP.NET Core 3.0 e superior , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangenão está disponível.

Surpreso que atualizar uma visualização enquanto o aplicativo está em execução não funcionou, descobri a seguinte solução:

  1. Adicione o pacote NuGet Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet ao projeto
  2. Adicione o seguinte em Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Aqui está a explicação completa para os curiosos ...

HTH


1
Isso não funcionou para mim por qualquer motivo. Estou no Mac, se isso faz diferença.
Nakul Tiruviluamala

@Nakul qual é a versão do núcleo .net que você usa?
Alexander Christov

Quando usei este comando: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, aparentemente obtive duas respostas: 2.1.13 e 3.0.0
Nakul Tiruviluamala

7
Isso funcionou muito bem para mim no Mac e ASP.NET Core 3.1.
user3071284

4
Obrigado por esta dica; trabalhou para mim no .Net Core 3.1.2
jawa

49

Acabei de criar um novo projeto usando o modelo ASP.NET MVC Core 3.1 mais recente e alterei o seguinte para habilitar a recompilação do tempo de execução para depuração:

Pacote NuGet de referência - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (IServiceCollection services) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

AGORA:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
Essa é a melhor resposta sem ler o artigo postado por Alex, que vale a pena ler.
Waragi

9

Você deve apenas adicionar isto:

services.AddControllersWithViews();

para o método ConfigureService .

Esteja ciente de que o código abaixo não está disponível no ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
Você precisa instalar o pacote nuget para fazê-lo funcionar Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

Abaixo me ajudou quando as visualizações estavam em projetos separados.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}

Esta é a única resposta que funcionou para mim ao trabalhar com bibliotecas de classes do Razor. Felicidades!
Sipke Schoorstra


1

Consegui resolver esse problema no Rider adicionando a ASPNETCORE_ENVIRONMENT=Developmentvariável de ambiente.



0

Existem duas maneiras de resolver esse problema:

1 . Verifique as permissões da pasta na qual o seu arquivo .sln está presente. Pode haver um problema com as permissões de acesso ao arquivo, pois o Visual Studio pode não acessar os arquivos quando o servidor expresso do IIS está em execução, para refletir novas alterações .cshtml sempre que precisar reinicie o servidor, então sugiro editar as permissões de acesso à pasta:

Clique com o botão direito na pasta-> propriedades-> segurança-> clique no botão editar -> verifique todas as opções-> salvar .

Reinicie o Visual Studio para ver as mudanças.

Se isso não funcionar, use 2 opções.

2. Em seu projeto no arquivo startup.cs, adicione a linha abaixo ConfigureServices () no método:

services.AddMvc (). AddRazorOptions (options => options.AllowRecompilingViewsOnFileChange = true);

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.