177                    
               

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

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

在默认的 .Net Core 项目中,它工作正常,所以它一定是我的项目中的某些东西在此过程中发生了变化。我想知道我需要从哪里开始调试这个问题?Startup.cs我已经尝试将我的几乎所有内容都注释掉Program.cs,但没有解决方案。                    

                                   
改进这个问题                                    
  • 我遇到了你在下面提到的同样的 MissingMethodException ......你有没有弄清楚?如果,那么你能回答你的问题吗? 
    – IEnjoyEatingVegetables                                    
     2019 年 8 月 20 日 19:59                                
  • 要与 Rider 和/或 Razor 类库 (RCL) 一起使用,请参阅此答案 
    – 乌韦·凯姆                                    
     20 年 11 月 15 日 11:28                                
  • 哇。没想到会这样。真是个无赖。2 年后,这仅获得 147 次投票。让您想知道谁在使用 .NET Core 构建应用程序... 
    – dpant                                    
     21 年 5 月 31 日 7:03                                 
       

14 个答案                    

积极的最老的投票                    
       
351                        
                   

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

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

  1. Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包添加到项目中

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

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

                                   

                               

这是好奇的完整解释                        

                                       
改进这个答案                                        
  • 2                                    
    无论出于何种原因,这对我都不起作用。如果这有所作为,我在 Mac 上。 
    – 纳库尔蒂鲁维鲁阿马拉                                        
     2019 年 10 月 10 日 3:50                                    
  • 8                                    
    这对我在 Mac 和 ASP.NET Core 3.1 上非常有用。 
    – 用户3071284                                        
     2019 年 12 月 16 日 22:31                                    
  • 4                                    
    谢谢这个提示;在 .Net Core 3.1.2 上为我工作 
    – 爪哇                                        
     20 年 3 月 4 日 11:51                                    
  • 30                                    
    哇塞!在 .NET 工作了 15 年,过去很容易。使用 .NET Core 工作 1 天,一切似乎都被打破了。说真的 - 谁决定让 HTML 在运行时默认编译并且不可更改是个好主意,然后让开发人员寻找解决方案? 
    – 杰森·斯奈德斯                                        
     20 年 5 月 9 日 11:22                                    
  • 4                                    
    谢谢!在 .Net 5.0 上工作! 
    – 伊格纳西奥                                        
     21 年 2 月 17 日 12:55                                    
       
92                        
                   

似乎在 ASP.NET Core 2.2 中进行了更改(我找不到有关此更改的任何公告)。如果您没有在“开发”环境中显式运行,则编译 Razor 视图,您将看不到对 .cshtml 所做的任何更改                        

但是,您可以使用 Startup 类中的一些配置来关闭它,如下所示。                        

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

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

                                       
改进这个答案                                        
  • 2                                    
    谢谢你。但是,似乎当我启用此功能时,在 html 中进行更改,然后刷新,我得到以下异常: MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() 关于此异常意味着什么的任何想法?所有其他页面加载正常。只有当我编辑文件并刷新时,我才会收到此错误 
    – 凯夫斯克里                                        
     2018 年 12 月 19 日 5:33                                     
  • 3                                    
    这对我有用。要根据环境进行设置,请将 IHostingEnvironment 添加到 Startup 方法并保留在属性中。然后使用类似的东西services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment")); 
    – 库里奥斯好奇                                        
     2019 年 4 月 18 日 20:49                                    
  • 1                                    
    谢谢它的工作。然而,我认为微软没有正式宣布这样的重大变化是相当尴尬和愚蠢的。 
    – Code_Worm                                        
     2019 年 8 月 12 日 18:04                                    
  • @kevskree 同样的事情发生在我身上 
    – IEnjoyEatingVegetables                                        
     2019 年 8 月 20 日 20:00                                    
  • 1                                    
    @Mayank Gupta:见下面亚历山大克里斯托夫的回答(stackoverflow.com/a/57637903/198990)。他的回答对我有用(3.1)。 
    – Sandor Drieënhuizen                                        
     20 年 2 月 18 日 15:09                                    
       
67                        
                   

我刚刚使用最新的 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...
                   
                                       
改进这个答案                                        
  • 3                                    
    这是不用看Alex发的文章的最佳答案,值得一读。 
    – 蕨木                                        
     20 年 2 月 7 日 15:23                                    
       
18                        
                   

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

  1. 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 包。

  2. 设置下一个环境变量(例如通过 launchSettings.json 中的 environmentVariables 部分):

  • ASPNETCORE_ENVIRONMENT to "Development".

  • ASPNETCORE_HOSTINGSTARTUPASSEMBLIES to "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

                                       
改进这个答案                                        
  • 1                                    
    这应该是公认的答案;它允许所需的功能,而无需更改启动文件。 
    – 汤姆·里根                                        
     21 年 2 月 1 日 15:53                                    
       
12                        
                   

你应该添加这个:                        

services.AddControllersWithViews();
                       

ConfigureService方法。                        

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();
                   
                                       
改进这个答案                                        
  • 9                                    
    您需要安装 nuget 包以使其正常工作 Microsoft.AspNetCore.Mvc.Razor.Runtime 
    – 马扬克·古普塔                                        
     20 年 1 月 19 日 16:14                                    
       
10                        
                   

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

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

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

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

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

  5. 打开 Startup.cs 文件

  6. 转到无效方法 ConfigureServices

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

  8. 你完成了

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

                                       
改进这个答案                                        
       
7                        
                   

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

services.AddRazorPages().AddRazorRuntimeCompilation();                        

                                       
改进这个答案                                        
       
5                        
                   

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

                                       
改进这个答案                                        
       
5                        
                   

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

if(HostingEnvironment.IsDevelopment()){ // only in development (optional)
    services.AddMvc().AddRazorOptions(o => {
        o.FileProviders.Add(new PhysicalFileProvider(PATH_TO_PROJECT));
    });
}
                   
                                       
改进这个答案                                        
  • 1                                    
    这是使用 Razor 类库时唯一对我有用的答案。干杯! 
    – 西普斯科斯特拉                                        
     2019 年 9 月 9 日 18:51                                    
  • 使用 Core 3.1 遵循这些指示,安装版本 3.1.16 并收到错误:“IMVcBuilder”不包含“AddRazorRuntimeCompilation”的定义,并且找不到接受“IMVcBuilder”类型的第一个参数的扩展方法“AddRazorRuntimeCompilation”。 
    – 克拉伦斯                                        
     21 年 6 月 27 日在 6:27                                    
       
1                        
                   

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

                                       
改进这个答案                                        
       
1                        
                   

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

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

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

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

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

2 .在您的项目中的startup.cs文件中,在方法中添加以下行ConfigureServices()                        

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

                                       
改进这个答案                                        
       
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                        

                                       
改进这个答案                                        
       
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" />
                       

(您的版本可能不同)                        

                                       
改进这个答案                                        
       
0                        
                   

在 Visual Studio 2022 Preview 中,似乎有一个名为 Hot Reload 的选项用于此目的。                        

在此处输入图像描述                        

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

借助 Hot Reload,您现在可以在应用程序运行时修改应用程序托管的源代码,而无需手动暂停或点击断点。只需在您的应用程序运行时进行受支持的更改,并在我们新的 Visual Studio 体验中使用“应用代码更改”按钮来应用您的编辑。                            

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

                                       
改进这个答案                                        
       

你的答案            

来自  https://stackoverflow.com/questions/53639969/net-core-mvc-page-not-refreshing-after-changes