.NET核心MVC页面更改后不刷新

我正在最新版本2.2上构建一个。net Core MVC。当我对CSHTML文件进行更改并刷新页面时,我有一个问题,我的更改没有反映在浏览器中。我必须重新启动项目才能看到我的更改。这种情况已经发生了一段时间了,所以我不确定是什么变化导致了这个问题。

我试过使用chrome的“空缓存和硬加载”以及其他浏览器,但都没有用。这发生在Windows和Mac上,使用Visual Studio for Mac和VS Code

在默认的。net Core项目中,它工作得很好,所以它一定是我的项目中发生了变化。我想知道我需要从哪里开始调试这个问题?我尝试过注释掉我的__abc0和Program.cs中的几乎所有内容,但没有解决方案。

96135 次浏览

您绝对确定使用的是2.2吗?检查你的csproj,因为它可能是这个错误https://github.com/aspnet/Razor/issues/2466 你可以尝试关闭RazorCompileOnBuild more info https://learn.microsoft.com/en-us/aspnet/core/razor-pages/sdk?view=aspnetcore-2.1#properties

在ASP中有一个变化。似乎是NET Core 2.2(我找不到任何关于这个变化的公告)。如果你没有显式地运行在“开发”环境中,那么Razor视图将被编译,你不会看到对.cshtml的任何更改

然而,你可以在你的Startup类中使用一些配置来关闭它,如下所示。

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

ASP。NET Core 3.0及更高版本,参见Alexander Christov的回答

使用。net core 2.2运行app命令dotnet watch run,项目在每次更改后都会重新启动

下面帮助我当视图在单独的项目。

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

ASP。NET Core 3.0及更高版本中,RazorViewEngineOptions.AllowRecompilingViewsOnFileChange不可用。

令人惊讶的是,在应用程序运行时刷新视图没有工作,我发现了以下解决方案:

  1. 添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包到 项目< / p >

  2. Startup.cs中添加以下内容:

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

下面是好奇的完整的解释

我能够在Rider中通过添加ASPNETCORE_ENVIRONMENT=Development环境变量来解决这个问题。

有两种方法可以解决这个问题:

1。检查您的.sln文件所在文件夹的权限。文件访问权限可能会有问题,因为Visual studio在IIS express服务器运行时可能无法访问文件,因此为了在每次需要重新启动服务器时反映新的.cshtml更改,因此我建议通过以下方式编辑文件夹访问权限:

右键单击文件夹->属性->安全->点击编辑按钮->检查所有选项->保存

重新启动Visual studio查看更改。

如果这不起作用,然后使用2选项。

2。在你的项目的startup.cs文件中,在method中添加下面的ConfigureServices ()行:

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

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

引用NuGet包- Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

Startup.cs - ConfigureServices(IServiceCollection services) WAS:

// stuff...


services.AddControllersWithViews();


// more stuff...

现在:

// stuff...


var mvcBuilder = services.AddControllersWithViews();


#if DEBUG
mvcBuilder.AddRazorRuntimeCompilation();
#endif


// more stuff...

你只需要加上这个:

services.AddControllersWithViews();

ConfigureService方法。

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

  1. 进入工具→Nuget包管理器→管理解决方案的Nuget包

  2. 移动到浏览标签从互联网浏览

  3. 查找RuntimeCompilation 点击microsoft . aspnetcore . mv . razor . runtimecompilation

  4. 将它安装到您的计划项目的当前稳定版本

  5. 打开Startup.cs文件

  6. go to void method ConfigureServices .

  7. add line: services.AddControllersWithViews().AddRazorRuntimeCompilation();

  8. 你完了

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

除了亚历山大·克里斯托夫的回答,由于ASP。NET Core 3.1可以为开发环境而不需要修改Startup文件启用视图编译:

  1. 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包。
  2. 设置下一个环境变量(例如通过launchSettings.json中的environmentVariables部分):
    • ASPNETCORE_ENVIRONMENT到“development”。
    • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES to " microsoft . aspnetcore . mv . razor . runtimecompilation"
首先使用nuget管理器安装microsoft . aspnetcore . mv . razor . runtimecompilation 然后将下面的代码添加到你的startup.cs

services.AddRazorPages().AddRazorRuntimeCompilation();

Net6.0也可以。

builder.Services.AddRazorPages().AddRazorRuntimeCompilation();

我在从。net Core 3升级到。net 5.0时遇到了类似的问题

问题是由于我们无法更改Telerik控件中的旧依赖。

通过更改.csproj文件中的引用修正

<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.8.0" />

<PackageReference Include="Microsoft.CodeAnalysis" Version="3.8.0" />

(你的版本可能不同)

在Visual Studio 2022预览版中,似乎有一个叫做热重载的选项。

enter image description here

它似乎也可以在Visual Studio 2019中使用。

使用热重载,您现在可以修改您的应用程序托管源代码 应用程序正在运行,不需要手动暂停或点击 一个断点。只需在应用程序运行时进行受支持的更改 在我们新的Visual Studio体验中使用“应用代码更改”

https://devblogs.microsoft.com/dotnet/introducing-net-hot-reload/

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

我从NuGet包管理器中安装了Microsoft.AspNetCore.Mvc.Razor.Runtime.Compilation,然后添加了.AddRazorRuntimeCompilation();

builder.services.AddControllersWithViews();

它看起来是这样的

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

它成功了!

希望这对你有所帮助。