【问题标题】:.NET Core MVC Page Not Refreshing After Changes.NET Core MVC 页面在更改后不刷新
【发布时间】:2019-05-07 11:24:10
【问题描述】:

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

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

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

【问题讨论】:

  • 我遇到了你在下面提到的同样的 MissingMethodException ......你有没有弄清楚?如果,那么你能回答你的问题吗?
  • 用于 Rider 和/或 Razor 类库 (RCL),see this answer
  • 哇。没想到会这样。真是个无赖。 2 年后,这仅获得 147 次投票。让您想知道谁在使用 .NET Core 构建应用程序...

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


【解决方案1】:

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

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

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

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

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

这里是 full explanation 给好奇的人。

【讨论】:

  • 无论出于何种原因,这对我都不起作用。如果这有什么不同,我在 Mac 上。
  • 这对我在 Mac 和 ASP.NET Core 3.1 上非常有用。
  • 感谢这个提示;在 .Net Core 3.1.2 上为我工作
  • 哇!在 .NET 工作了 15 年,过去很容易。使用 .NET Core 工作 1 天,一切似乎都被打破了。说真的 - 谁认为让 HTML 在运行时默认编译且不可更改是个好主意,然后让开发人员寻找解决方案?
  • 谢谢!在 .Net 5.0 上工作!
【解决方案2】:

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

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

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

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

【讨论】:

  • 谢谢。但是,似乎当我启用它时,在 html 中进行更改,然后刷新,我得到以下异常:MissingMethodException: Method not found: 'Microsoft.Cci.IMethodReference Microsoft.Cci.ICustomAttribute.Constructor(Microsoft.CodeAnalysis.Emit.EmitContext)'. Microsoft.CodeAnalysis.CSharp.Symbol.Microsoft.CodeAnalysis.ISymbol.GetAttributes() 知道这个异常意味着什么吗?所有其他页面加载正常。只有当我编辑文件并刷新时才会收到此错误
  • 这对我有用。要根据环境进行设置,请将 IHostingEnvironment 添加到 Startup 方法并保留在属性中。然后使用类似services.AddMvc().AddRazorOptions(options => options.AllowRecompilingViewsOnFileChange = _env.IsEnvironment("MyEnvironment"));
  • 感谢它的工作。但是,我认为微软没有正式宣布这样的重大变化是非常尴尬和愚蠢的。
  • @kevskree 同样的事情发生在我身上
  • @Mayank Gupta:见下面 Alexander Christov 的回答 (stackoverflow.com/a/57637903/198990)。他的回答对我有用(3.1)。
【解决方案3】:

我刚刚使用最新的 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...

【讨论】:

  • 这是不看Alex发的文章的最佳答案,值得一读。
【解决方案4】:

除了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”。

【讨论】:

  • 这应该是公认的答案;它允许所需的功能,而无需更改启动文件。
  • 如果您将项目从 .NET 5 升级到 .NET 6,您还需要将 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 从 v5.x 更新到 v6.x,否则您将看不到在您制作 Razor 视图或页面时进行更改。
【解决方案5】:

你应该添加这个:

services.AddControllersWithViews();

ConfigureService 方法。

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

【讨论】:

  • 您需要安装 nuget 包才能使其正常工作 Microsoft.AspNetCore.Mvc.Razor.Runtime
【解决方案6】:

对于那些使用 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();

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

        • 这是在使用 Razor 类库时唯一对我有用的答案。干杯!
        • 使用 Core 3.1 遵循这些指示,安装版本 3.1.16 并收到错误:“IMVcBuilder”不包含“AddRazorRuntimeCompilation”的定义,并且没有扩展方法“AddRazorRuntimeCompilation”接受第一个参数类型“可以找到 IMVcBuilder'。
        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

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

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

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

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

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

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

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

          【讨论】:

            【解决方案12】:

            您确定您使用的是 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

            【讨论】:

              【解决方案13】:

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

              (您的版本可能不同)

              【讨论】:

                【解决方案14】:

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

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

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

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

                【讨论】:

                  猜你喜欢
                  • 2020-08-06
                  • 2022-01-21
                  • 2020-11-26
                  • 1970-01-01
                  • 2019-06-03
                  • 2016-08-04
                  • 2010-12-26
                  • 1970-01-01
                  • 2022-11-14
                  相关资源
                  最近更新 更多