速读:基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
最近有段时间没更新博客开发笔记了,怠惰了啊 = =..
趁着周末,给博客项目完善了一些细节的功能,然后准备部署上线~
本来这篇文章是要记录几个功能(主题切换、项目监控、随机图片接口)的实现的,不过我在写页面的时候发现每次改完Razor都要重启好麻烦,所以踩坑了一番,便有了本文。
(资料图)
虽然.Net6开始支持部分代码热更新了,不过还是很鸡肋,经常修改Razor页面了但点Apply还是没效果~
我还是用回.NetCore3.1之前常用的动态编译比较好~
首先NuGet安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation,在Program.cs中配置一下
原本添加MVC服务是这样的
builder.Services.AddControllersWithViews(options=>{options.Filters.Add();})
改成这样(开发模式才启用动态编译)
varmvcBuilder=builder.Services.AddControllersWithViews(options=>{options.Filters.Add();});if(builder.Environment.IsDevelopment()){mvcBuilder.AddRazorRuntimeCompilation();}
也可以不修改C#代码,通过环境变量的方式实现,修改launchSettings.json文件,添加一个环境变量
这样启动程序的时候会动态加载RuntimeCompilation。
"environmentVariables":{"ASPNETCORE_ENVIRONMENT":"Development","ASPNETCORE_HOSTINGSTARTUPASSEMBLIES":"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"}
另外,还有更彻底的方法,发布打包的时候不要编译cshtml文件,方便在发布后修改Razor页面。
在项目配置文件 (xxx.csproj) 中配置
false false
这样在发布的时候,所有的 Razor 视图都不会被预编译了,并且所有的视图都会一同被发布,方便线上环境修改Razor页面。
不过要注意在发布的生产环境中,修改视图文件是不会立即生效的,需要重启程序(对于 IIS 宿主的运行环境需要重启站点)才会生效。
还可以配置条件编译,详情可以参考:https://www.cnblogs.com/thinksea/articles/14772837.html
这样修改完Razor页面,保存,就会自动重新编译,方便修改页面后实时查看效果。
配置动态编译后报错我在这里遇到一个问题,之前.NetCore3.1的项目没遇到过
添加了动态编译后启动程序报错
Unhandledexception.System.ArgumentNullException:Valuecannotbenull.(Parameter"source")atSystem.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgumentargument)atSystem.Linq.Enumerable.OfType[TResult](IEnumerablesource)atMicrosoft.AspNetCore.Mvc.RazorPages.Infrastructure.PageActionDescriptorProvider..ctor(IEnumerable`1pageRouteModelProviders,IOptions`1mvcOptionsAccessor,IOptions`1pagesOptionsAccessor)...省略一大堆报错信息atProgram.$(String[]args)inStarBlog\StarBlog.Web\Program.cs:line96
经过搜索,找到一个Github issues:https://github.com/dotnet/aspnetcore/issues/40609
Do you have the 6.0.201 SDK / 6.0.3 Microsoft.AspNetCore.App runtime installed? Patch builds of packages typically require a corresponding version of the runtime to be installed.
看了下我的dotnet SDK版本,是 6.0.101 ,看来是SDK的bug,更新一下版本应该就行~
(过了十分钟)更新好了,问题果然解决了!
参考资料.Net Core 5.0 Razor 预编译,动态编译,混合编译:https://www.cnblogs.com/thinksea/articles/14772837.html.NET Hot Reload support for ASP.NET Core:https://docs.microsoft.com/en-us/aspnet/core/test/hot-reload?view=aspnetcore-6.0Razor file compilation in ASP.NET Core:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-6.0&tabs=visual-studioCan"t get RazorPageOptions from DI with version 6.0.3 of Mvc.Razor.RuntimeCompilation:https://github.com/dotnet/aspnetcore/issues/40609相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...