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


111

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

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

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


我遇到了与您在下面提到的相同的MissingMethodException ...您有没有发现?如果可以,请您回答问题吗?
JohnOsborne

Answers:


59

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

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

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

对于ASP.NET Core 3.0及更高版本,请参见Alexander Christov的答案


1
谢谢。但是,似乎启用了此功能后,在html中进行了更改,然后刷新,我得到了以下异常: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() 是否知道此异常的含义?其他所有页面加载正常。仅当我编辑文件并刷新时,才会出现此错误
kevskree

3
这对我有用。若要根据环境进行设置,请将IHostingEnvironment添加到Startup方法中并保留在属性中。然后使用类似services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
KuriosCurious19 '19

1
谢谢它的工作。但是,我认为微软没有正式宣布这样的重大变化是很尴尬和愚蠢的。
Code_Worm

@kevskree我也正在发生同样的事情
JohnOsborne

1
@Mayank Gupta:请参阅下面的Alexander Christov的答案(stackoverflow.com/a/57637903/198990)。他的回答对我有用(3.1)。
SandorDrieënhuizen

202

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

感到惊讶的是,在应用程序运行时刷新视图不起作用,我发现了以下解决方案:

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

    services.AddControllersWithViews()。AddRazorRuntimeCompilation() ;

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

高温超导


1
无论出于什么原因,这都不适合我。如果可以,那么我在Mac上。
Nakul Tiruviluamala,

@Nakul您使用的.net核心版本是什么?
亚历山大·克里斯托夫

当我使用以下命令时:ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/我似乎得到了两个答案:2.1.13和3.0.0
Nakul Tiruviluamala

7
在Mac和ASP.NET Core 3.1上,这对我来说非常有效。
user3071284

4
感谢这个提示;在.Net Core 3.1.2上为我工作
卡瓦,

49

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

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

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

// stuff...

services.AddControllersWithViews();

// more stuff...

现在:

// stuff...

var mvcBuilder = services.AddControllersWithViews();

#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif

// more stuff...

1
如果不阅读Alex发表的文章,这是最佳答案,值得一读。
Waragi

9

您应该添加以下内容:

services.AddControllersWithViews();

ConfigureService方法。

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

6
您需要安装nuget软件包才能使其正常运行Microsoft.AspNetCore.Mvc.Razor.Runtime
Mayank Gupta

4

当视图在单独的项目中时,下面的内容对我有所帮助。

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

这是使用Razor类库时唯一对我有用的答案。干杯!
Sipke Schoorstra


1

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



0

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

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

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

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

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

2。startup.cs文件中的项目中,在方法中的ConfigureServices()行下方添加此代码:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.