La página de .NET Core MVC no se actualiza después de los cambios

113

Estoy construyendo un .NET Core MVC en la última versión 2.2. Tengo un problema cuando hago cambios en el archivo CSHTML y actualizo la página, mis cambios no se reflejan en el navegador. Tengo que reiniciar el proyecto para ver mis cambios. Esto ha estado sucediendo durante un tiempo, por lo que no estoy exactamente seguro de qué cambio causó este problema.

Intenté usar "Vaciar caché y recargar duro" de Chrome, así como otros navegadores, sin éxito. Esto sucede en Windows y Mac usando Visual Studio para Mac y VS Code

En un proyecto .Net Core predeterminado, funciona bien, por lo que debe ser algo en mi proyecto que cambió a lo largo del camino. Me pregunto por dónde debo comenzar para depurar este problema. He intentado comentar casi todo en mi Startup.csy Program.cssin resolución.

kevskree
fuente
Me encuentro con la misma MissingMethodException que mencionaste a continuación ... ¿Alguna vez lo has descubierto? Si es así, ¿podría responder a su pregunta?
JohnOsborne

Respuestas:

59

Parece que se realizó un cambio en ASP.NET Core 2.2 (y no puedo encontrar ningún anuncio sobre este cambio). Si no está ejecutando explícitamente en el entorno de 'Desarrollo', las Vistas de Razor se compilan y no verá ningún cambio realizado en .cshtml

Sin embargo, puede desactivar esto usando alguna configuración en su clase de inicio de la siguiente manera.

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

Para ASP.NET Core 3.0 y superior, consulte la respuesta de Alexander Christov .

Chris Aitchison
fuente
2
Gracias. Sin embargo, parece que cuando habilito esto, hago un cambio en el html y luego actualizo, obtengo la siguiente excepción: ¿ MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() Alguna idea de lo que significa esta excepción? Todas las demás páginas se cargan bien. Solo cuando edito un archivo y actualizo
aparece
3
Esto funcionó para mí. Para configurarlo según el entorno, agregue IHostingEnvironment al método Startup y persista en una propiedad. Luego use algo comoservices.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious
1
gracias funcionó. Sin embargo, creo que es bastante incómodo y tonto que Microsoft no anuncie oficialmente grandes cambios como este.
Code_Worm
@kevskree me está pasando lo mismo
JohnOsborne
1
@Mayank Gupta: consulte la respuesta de Alexander Christov a continuación ( stackoverflow.com/a/57637903/198990 ). Su respuesta funcionó para mí (3.1).
Sandor Drieënhuizen
208

En ASP.NET Core 3.0 y superior , RazorViewEngineOptions.AllowRecompilingViewsOnFileChangeno está disponible.

Sorprendido de que actualizar una vista mientras la aplicación se está ejecutando no funcionó, descubrí la siguiente solución:

  1. Agregue el paquete Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet al proyecto
  2. Agregue lo siguiente en Startup.cs:

    services.AddControllersWithViews (). AddRazorRuntimeCompilation () ;

Aquí está la explicación completa para los curiosos ...

HTH

Alexander Christov
fuente
1
Esto no funcionó para mí por alguna razón. Estoy en Mac si eso marca la diferencia.
Nakul Tiruviluamala
@Nakul ¿cuál es la versión principal de .net que usa?
Alexander Christov
Cuando utilicé este comando: ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/, aparentemente obtuve dos respuestas: 2.1.13 y 3.0.0
Nakul Tiruviluamala
7
Esto funcionó muy bien para mí en Mac y ASP.NET Core 3.1.
user3071284
4
Gracias por esta pista; funcionó para mí en .Net Core 3.1.2
jawa
50

Acabo de crear un nuevo proyecto utilizando la última plantilla ASP.NET MVC Core 3.1 y modifiqué lo siguiente para habilitar la recompilación en tiempo de ejecución para la depuración:

Paquete NuGet de referencia: Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation .

Startup.cs - ConfigureServices (servicios de IServiceCollection) ERA:

// stuff...

services.AddControllersWithViews();

// more stuff...

AHORA:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Jeremías N
fuente
1
Esta es la mejor respuesta sin leer el artículo publicado por Alex, que vale la pena leer.
Waragi
10

Deberías agregar esto:

services.AddControllersWithViews();

al método ConfigureService .

Tenga en cuenta que el siguiente código no está disponible en ASP.NET Core 3.1:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Alireza Abdollahnejad
fuente
6
Necesita instalar el paquete nuget para que funcione Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta
4

A continuación, me ayudó cuando las vistas estaban en un proyecto separado.

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
smoq
fuente
Esta es la única respuesta que me funcionó al trabajar con las bibliotecas de clases Razor. ¡Salud!
Sipke Schoorstra
3

Usando la aplicación en ejecución .net core 2.2 con comando, dotnet watch runel proyecto se reinicia después de cada cambio

tramada
fuente
1

Pude resolver este problema en Rider agregando la ASPNETCORE_ENVIRONMENT=Developmentvariable de entorno.

usuario1613512
fuente
0

Hay dos formas de resolver este problema:

1 . Verifique los permisos de la carpeta en la que se encuentra su archivo .sln.Puede haber un problema con los permisos de acceso a archivos, ya que Visual Studio puede no acceder a los archivos cuando el servidor IIS Express se está ejecutando, por lo que debe reflejar nuevos cambios .cshtml cada vez que necesite reinicie el servidor, por lo que sugiero editar los permisos de acceso a la carpeta de la siguiente manera:

Haga clic derecho en la carpeta-> propiedades-> seguridad-> haga clic en el botón editar -> marque todas las opciones-> guardar .

Reinicie Visual Studio para ver los cambios.

Si esto no funciona, utilice la opción 2.

2 .En su proyecto en el archivo startup.cs agregue la siguiente línea ConfigureServices () en el método:

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

Omkar Nevase
fuente