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.


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 .


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


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...

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();

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));
    });
}

Esta es la única respuesta que me funcionó al trabajar con las bibliotecas de clases Razor. ¡Salud!
Sipke Schoorstra


1

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



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);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.