You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor类库中.cshtml文件热重载失效问题求助

解决.NET6 Razor类库(RCL)中CSHTML文件热重载不生效的问题

1. 调整RCL项目的编译配置

打开RCL的.csproj文件,确保以下配置正确:

<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <!-- 禁用构建时编译Razor文件,确保运行时读取源文件 -->
    <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <!-- 发布时仍编译,保证生产环境性能 -->
    <RazorCompileOnPublish>true</RazorCompileOnPublish>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  </PropertyGroup>
</Project>

默认RCL会在构建时把CSHTML编译进程序集,导致运行时加载的是编译后的文件而非源文件,修改后运行时直接读取CSHTML源文件,为热重载提供基础。

2. 修正Web项目的RuntimeCompilation配置

确保PhysicalFileProvider指向RCL项目的根目录,而非输出目录,同时补充视图路径和缓存禁用配置:

var builder = WebApplication.CreateBuilder(args);

// 启用Razor运行时编译
builder.Services.AddRazorPages().AddRazorRuntimeCompilation();

builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
{
    // 构建RCL项目根目录路径,根据实际项目名称调整
    var rclProjectPath = Path.GetFullPath(
        Path.Combine(builder.Environment.ContentRootPath, "..", "razor.platform.thehub.cloud"));
    
    // 添加RCL项目目录作为文件提供者
    options.FileProviders.Add(new PhysicalFileProvider(rclProjectPath));
    
    // 将RCL项目路径加入引用路径,确保运行时编译能找到依赖
    options.AdditionalReferencePaths.Add(rclProjectPath);
});

// 配置Razor视图引擎,确保能识别RCL中的页面结构
builder.Services.Configure<RazorViewEngineOptions>(options =>
{
    options.PageViewLocationFormats.Add("/Pages/{0}.cshtml");
    options.PageViewLocationFormats.Add("/Pages/Shared/{0}.cshtml");
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    // 禁用浏览器缓存,避免旧视图被缓存
    app.Use(async (context, next) =>
    {
        context.Response.Headers["Cache-Control"] = "no-cache, no-store, must-revalidate";
        context.Response.Headers["Pragma"] = "no-cache";
        context.Response.Headers["Expires"] = "0";
        await next();
    });
}

app.UseStaticFiles();
app.MapRazorPages();
app.Run();

3. 检查VS热重载设置

  • 打开VS2022「工具」-「选项」-「项目和解决方案」-「ASP.NET Core」,确认「启用热重载」和「自动应用热重载」已勾选。
  • 调试时,看到热重载提示后手动刷新浏览器(部分场景下自动刷新会失效,手动刷新能确保加载最新视图)。

4. 清理缓存并重启VS

如果以上步骤无效,尝试:

  • 删除Web项目和RCL项目的bin、obj目录。
  • 重启VS2022,重新生成解决方案后启动调试。

内容的提问来源于stack exchange,提问作者David D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:30:51