.NET Framework 4.8中使用Microsoft.AspNetCore.Mvc.Razor替代RazorEngine遇依赖错误求助
解决方案:.NET Framework 4.8下适配Microsoft.AspNetCore.Mvc.Razor的服务注册
你的错误源于服务容器中缺少Razor视图渲染所需的基础依赖服务。ASP.NET Core的Razor组件依赖ILoggerFactory、文件系统提供者等核心服务,而AddMvcCore().AddRazorViewEngine()并未自动注册这些依赖。以下是适配.NET Framework 4.8的修正步骤:
1. 安装必要的NuGet包
确保已安装以下包:
Microsoft.AspNetCore.Mvc.RazorMicrosoft.Extensions.DependencyInjectionMicrosoft.Extensions.Logging.ConsoleMicrosoft.Extensions.FileProviders.Physical
2. 完善服务注册代码
修改你的测试代码,补充日志服务、文件系统服务及视图特性服务:
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.FileProviders; using System.IO; static void Main(string[] args) { var services = new ServiceCollection(); // 添加日志服务,解决ILoggerFactory依赖 services.AddLogging(builder => { builder.AddConsole(); // .NET Framework下也可添加EventLog等其他日志提供器 // builder.AddEventLog(); }); // 添加文件系统服务,Razor视图需要读取文件 var contentRoot = Directory.GetCurrentDirectory(); // 替换为你的视图根目录 services.AddSingleton<IFileProvider>(new PhysicalFileProvider(contentRoot)); // 添加MvcCore及Razor视图引擎、视图特性服务 services.AddMvcCore() .AddRazorViewEngine() .AddViewFeatures(); // 补充TempData相关依赖 // 注册RazorViewToStringRenderer services.AddSingleton<RazorViewToStringRenderer>(); var provider = services.BuildServiceProvider(); var service = provider.GetRequiredService<RazorViewToStringRenderer>(); }
3. 额外注意事项
- 确保你的Razor视图文件(
.cshtml)放在正确目录下,默认从Views文件夹查找,可通过配置RazorViewEngineOptions自定义路径:services.Configure<RazorViewEngineOptions>(options => { options.ViewLocationFormats.Add("/CustomViews/{0}.cshtml"); }); - 若
RazorViewToStringRenderer依赖IHttpContextAccessor,需额外注册:services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
内容的提问来源于stack exchange,提问作者user79517
相关产品推荐
相关产品推荐

