更改后.NET Core MVC页面不刷新

kev*_*ree 38 asp.net-core-mvc .net-core asp.net-core asp.net-core-2.2

我正在最新版本2.2上构建.NET Core MVC。更改CSHTML文件并刷新页面时出现问题,我的更改未反映在浏览器中。我必须重新启动项目才能看到我的更改。现在已经发生了一段时间,所以我不确定是什么变化导致了此问题。

我尝试使用Chrome浏览器的“空缓存和硬重载”以及其他浏览器都无济于事。在同时使用Visual Studio for Mac和VS Code的Windows和Mac上发生这种情况

在默认的.Net Core项目中,它工作正常,因此在我的项目中必须有所更改。我想知道从哪里开始才能调试此问题?我尝试注释掉几乎所有内容,Startup.cs并且Program.cs没有解决方法。

小智 66

我刚刚使用最新的 ASP.NET MVC Core 3.1 模板创建了一个新项目,并更改了以下内容以启用运行时重新编译以进行调试:

参考 NuGet 包 - Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Startup.cs - ConfigureServices(IServiceCollection services) WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...
Run Code Online (Sandbox Code Playgroud)

现在:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...
Run Code Online (Sandbox Code Playgroud)

  • 这是无需阅读 Alex 发表的文章即可获得的最佳答案,值得一读。 (3认同)

Ale*_*tov 46

ASP.NET Core 3.0中(编写时仍处于预览状态!)RazorViewEngineOptions.AllowRecompilingViewsOnFileChange不可用(或无法访问吗?-没有时间检查)。

感到惊讶的是,在应用程序运行时刷新视图不起作用,我发现了以下解决方案(请注意,发行版中的内容可能会发生变化!):

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet程序包添加到项目
  2. 在中添加以下内容Startup.cs

    services.AddControllersWithViews()。AddRazorRuntimeCompilation() ;

这是对好奇的完整解释 ...

高温超导

  • 哇塞!在 .NET 工作了 15 年,以前很容易。使用 .NET Core 1 天,一切似乎都坏了。说真的 - 谁认为默认情况下编译 HTML 并且在运行时不可更改是一个好主意,然后让开发人员寻找解决方案? (23认同)
  • 这对我在 Mac 和 ASP.NET Core 3.1 上非常有用。 (8认同)
  • 谢谢这个提示;在 .Net Core 3.1.2 上为我工作 (4认同)
  • 谢谢!致力于 .Net 5.0! (3认同)
  • 在 VS2022 上使用 .net 6,这也很好用! (3认同)
  • 无论出于何种原因,这对我来说都不起作用。如果这有什么区别的话,我用的是Mac。 (2认同)

小智 23

似乎ASP.NET Core 2.2中进行了更改(并且我找不到有关此更改的任何公告)。如果未在“开发”环境中明确运行,则将编译“剃刀视图”,并且不会看到对.cshtml所做的任何更改

但是,您可以使用Startup类中的某些配置关闭此功能,如下所示。

services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = true);
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。若要根据环境进行设置,请将IHostingEnvironment添加到Startup方法中并保留在属性中。然后使用类似“ services.AddMvc()。AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment(“ MyEnvironment”)));之类的东西。 (3认同)
  • 谢谢你。但是,似乎当我启用此功能时,在 html 中进行更改,然后刷新,我收到以下异常:```MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor( Microsoft.CodeAnalysis.Emit.EmitContext)'。Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes()``` 知道这个异常意味着什么吗?所有其他页面加载正常。只有当我编辑文件并刷新时才会出现此错误 (2认同)

Gur*_*ron 13

除了Alexander Christov 的回答之外,从 ASP.NET Core 3.1 开始,您可以在不更改Startup文件的情况下为开发环境启用视图编译:

  1. 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。
  2. 设置下一个环境变量(例如通过 launchSettings.json 中的 environmentVariables 部分):
    • ASPNETCORE_ENVIRONMENT 到“发展”。
    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES 到“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”。

  • 这应该是公认的答案;它无需更改启动文件即可实现所需的功能。 (4认同)

Ali*_*jad 12

你应该只添加这个:

services.AddControllersWithViews();
Run Code Online (Sandbox Code Playgroud)

ConfigureService方法。

请注意以下代码在 ASP.NET Core 3.1 中不可用:

services.AddControllersWithViews().AddRazorRuntimeCompilation();
Run Code Online (Sandbox Code Playgroud)

  • 您需要安装 nuget 包才能使其正常工作 Microsoft.AspNetCore.Mvc.Razor.Runtime (9认同)

小智 7

对于使用 Net core 3.0 或更高版本的用户

  1. 转到工具?Nuget 包管理器?管理解决方案的 nuget 包

  2. 移动到浏览选项卡从互联网浏览

  3. 搜索 RuntimeCompilation 单击 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

  4. 将其安装在您预期的项目中当前的稳定版本

  5. 打开 Startup.cs 文件

  6. 转到 void 方法 ConfigureServices

  7. 添加行: services.AddControllersWithViews().AddRazorRuntimeCompilation();

  8. 你完成了

重新运行看看。现在您可以刷新您的视图或页面。


小智 7

首先使用 nuget 管理器安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation,然后将以下代码添加到您的 startup.cs

services.AddRazorPages().AddRazorRuntimeCompilation();


tra*_*ada 5

使用 .net core 2.2 运行带有命令dotnet watch run的应用程序,每次更改后都会重新启动项目


Mar*_*ski 5

当视图在单独的项目中时,下面帮助了我。

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


小智 5

如果您使用的是.Net Core 3.0,请使用RazorRuntimeCompilationMvcBuilderExtensions扩展方法AddRazorRuntimeCompilation()

遵循的步骤:

  • 安装NuGet软件包 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation可从此处获得
  • 在的ConfigureServices方法中添加以下代码Startup.cs

    services.AddControllersWithViews().AddRazorRuntimeCompilation();


Sae*_*dam 5

我在开发 .NET 6 MVC Web 应用程序时遇到了同样的问题。

我从 NuGet Package Manger安装了Microsoft.AspNetCore.Mvc.Razor.Runtime.Compilation.AddRazorRuntimeCompilation();然后添加

builder.services.AddControllersWithViews();
Run Code Online (Sandbox Code Playgroud)

所以它看起来像这样

builder.services.AddControllersWithViews().AddRazorRuntimeCompilation();

成功了!

希望这有帮助。