Asp.net Core 6.0 之动态修改Cshtml(发布篇)

本文解决ASP.NET Core 6.0中动态编译Cshtml的问题,详细介绍了如何正确配置以实现在IIS上的动态更新,避免预编译陷阱。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天写了一篇动态修改Cshtml的,不过那是在开发环境下,用IIS_Express或独立进程的方式。但最终发布到IIS,该如何更新呢?

这个不得不说是遇到一个巨大的坑了。

首先在网上查,似乎也很简单,就是在Startup.cs里的ConfigureServices()方法里加上
            services.AddRazorPages().AddRazorRuntimeCompilation(); 包括最新的官网上都是这样写的,参见ASP.NET Core 中的 Razor 文件编译 | Microsoft Docs

另外,还要将FolderProfile.pubxml里的预编译设为False,

 <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>

我照做了,发布后却感觉有点不对劲:

1.如果不设为false,在发布目录下并没有生成XXXX.View.dll,只有一个XXXX.dll,我修改了一个Cshtml,发布到另一个目录,只将XXXX.dll更新到站点下,页面就更新了,说明Cshtml被编译到这个dll里了。

2.如果设为false,确实发布后有View目录了,但访问网站却直接报错了,说找不到内容。感觉根本没有执行AddRazorRuntimeCompilation()这个方法。

我仔细回忆了一下,这个startup.cs文件 在创建项目之初并不存在,是我手工添加的,难道是最新版本又有变化?再查了下项目的启动次序

 https://www.cnblogs.com/whuanle/p/10095209.html

到progarm.cs里看了下,里面有个builder.Services.AddControllersWithViews(),我加上了启用动态编译的方法:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();
var app = builder.Build();

再发布后,这次打开页面用了很长的时间,估计有戏了,应该是在动态编译。页面能打开了。试着改了下Cshtml,再刷新下页面,能看到更新了!

总结:应该是最新版本6.0做了启动方法的整合,弃用了Startup.cs,启动时的服务设置放到了Program.cs中,但是文档即没有更新....

建议:在学习Asp.net 6.0之前,建议先看下差异ASP.NET Core 6.0 的新增功能 | Microsoft Docs

因为其它地方的文档还没有更新,看这里就能理解为什么没有XXXXX.View.dll了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值