.net 在Razor类库中热重新加载.cshtml文件(或任何避免重建的解决方案)

c9qzyr3d  于 2022-12-14  发布在  .NET
关注(0)|答案(1)|浏览(174)

bounty将在3天后过期。回答此问题可获得+50声望奖励。David D希望引起更多人关注此问题。

我有一个基本的剃刀页面项目,目标是使用Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 6.0.11(Microsoft.NET.Sdk.Web)的net6.0框架。
它使用一个Razor类库,同样面向net6.0(Microsoft.NET.Sdk.Razor)。
这两个项目在VS 2022 Pro中位于同一解决方案中。
我正在使用最小构建:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages().AddRazorRuntimeCompilation();
builder.Services.Configure<MvcRazorRuntimeCompilationOptions>(options => {
    var libraryPath = System.IO.Path.GetFullPath(System.IO.Path.Combine(builder.Environment.ContentRootPath, "..", "razor.platform.thehub.cloud"));
    options.FileProviders.Add(new PhysicalFileProvider(libraryPath));
});

var app = builder.Build();
app.UseStaticFiles();
app.MapRazorPages();
app.Run();

该项目构建和使用了Razor类库,非常好。Razor页面、wwwroot内容在使用应用程序中运行良好。断点在RCL中运行良好,对任何RCL wwwroot内容的更改都会按预期提示热重载(css、js等)。
我唯一的问题是RCL(页面)中的.cshtml。对它们的任何更改都会按预期提示热重新加载,因此VS调试正在检测代码更改并确认“已成功应用代码更改”。但是,未显示对RCL中的.cshtml文件的更改。我必须重新生成并重新启动本地调试会话才能查看这些更改。
我确信我过去已经能够做到这一点(核心2/3),但这可能是我的想象!
任何帮助都非常感谢。

6qftjkof

6qftjkof1#

我也在想same,过去存在的功能叫做“剃刀运行时编译”,根据官方文档:
按照有条件地在现有项目中启用运行时编译中的说明启用运行时编译。
在“启动”中配置运行时编译选项。配置服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
    {
        var libraryPath = Path.GetFullPath(
            Path.Combine(HostEnvironment.ContentRootPath, "..", "MyClassLib"));
        options.FileProviders.Add(new PhysicalFileProvider(libraryPath));
    });
}

在前面的代码中,构造了MyClassLib RCL的绝对路径。PhysicalFileProvider API用于定位该绝对路径中的目录和文件。最后,PhysicalFileProvider示例添加到文件提供程序集合中,该集合允许访问RCL的.cshtml文件。

相关问题