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

时间:2018-12-05 20:07:52

标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.2

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

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

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

13 个答案:

答案 0 :(得分:61)

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

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

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet软件包添加到 项目
  2. Startup.cs中添加以下内容:

    services.AddControllersWithViews()。 AddRazorRuntimeCompilation();

这里是full explanation,表示好奇...

HTH

答案 1 :(得分:10)

您应该添加以下内容:

services.AddControllersWithViews();

ConfigureService 方法。

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

答案 2 :(得分:7)

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

所做的任何更改

不过,您可以按照以下步骤在Startup类中使用某些配置来关闭此功能。

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

答案 3 :(得分:7)

除了Alexander Christov's answer之外,从ASP.NET Core 3.1开始,您可以为开发环境without changes to the Startup file启用视图编译:

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

答案 4 :(得分:5)

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

services.AddRazorPages().AddRazorRuntimeCompilation();

答案 5 :(得分:3)

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

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

Startup.cs-ConfigureServices(IServiceCollection服务)WAS:

// stuff...

services.AddControllersWithViews();

// more stuff...

现在:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

答案 6 :(得分:1)

通过添加ASPNETCORE_ENVIRONMENT=Development环境变量,我可以在Rider中解决此问题。

答案 7 :(得分:1)

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

  1. 转到工具→Nuget程序包管理器→管理nuget包以获取解决方案

  2. 移动到浏览选项卡以从Internet浏览

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

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

  5. 打开Startup.cs文件

  6. 转到void方法ConfigureServices

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

  8. 您完成了

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

当视图位于单独的项目中时,以下内容帮助了我。

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

答案 11 :(得分:0)

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

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

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

重新启动Visual Studio以查看更改。

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

2 。在您的项目的 startup.cs 文件中,将其添加到方法中的 ConfigureServices()行下面:

  

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

答案 12 :(得分:0)

我在从 .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" />

(你的版本可能不同)