【问题标题】:Does Asp.Net Core 3.0 cache views/output differently than version 2.2?Asp.Net Core 3.0 缓存视图/输出是否与版本 2.2 不同?
【发布时间】:2019-10-23 21:03:43
【问题描述】:

我今天早些时候开始注意到我的开发设置中的一个问题,这是我以前从未见过的。

我有一个带有默认路由的 Asp.Net Core 应用程序,它为使用 webpack 构建的 javascript 包提供服务。此默认路由使用名为 Index.cshtml 的视图。

Index.cshtml 由 webpack 使用 webpack 插件 HtmlWebpackPlugin 从不同的文件自动生成。每次 webpack 重建 bundle 时,它​​都会用新版本覆盖 Index.cshtml,其中包含指向新构建的 bundle 的 script 标签。

Asp.Net 应用程序在 docker 容器内运行,但 Visual Studio 会自动将应用程序根文件夹挂载到主机上的相应文件夹,因此无需重新构建容器即可更新静态文件。

到今天为止,此设置已经运行了一年多。

现在,由于某种原因,当构建一个新包时,Asp.Net 生成的 HTML 仍然指向旧包。起初,我以为磁盘挂载有问题。但是,当我附加到正在运行的容器并从容器内部查看 Index.cshtml 时,它看起来是正确的(意味着它指向新的 js 包)。

我大约一周前从 Asp.Net core 2.2 升级到 3.0,我怀疑这与此有关。我在网络上找不到任何信息表明默认情况下输出缓存或视图缓存的工作方式与 2.2 版不同,但我可能遗漏了一些东西。

有人知道问题可能是什么吗?

【问题讨论】:

  • 也许您使用ResponseCache 并设置为NoStore = true。然后再次检查。
  • @Also 我怀疑这是与运行时编译相关的行为。请添加对 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation (<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.0.0" />) 的包引用,并通过 services.AddControllersWithViews().AddRazorRuntimeCompilation() 启用此功能。
  • @itminus 谢谢,成功了!我还发现这篇文章解释了这一重大变化的细节和动机:devblogs.microsoft.com/aspnet/…

标签: asp.net visual-studio docker asp.net-core webpack


【解决方案1】:

对于遇到相同问题的任何人:

正如@itminus 所评论的,为了支持razor 视图的运行时编译,您需要添加对Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 的引用并运行

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

在配置服务中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2020-09-02
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    相关资源
    最近更新 更多