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

.NET Core 6升级后视图渲染抛出View NotFound异常求助

.NET 6 视图渲染到Stream时ViewNotFound异常解决方案

根因

.NET 6 调整了Razor视图引擎的默认行为:

  • 默认启用视图预编译,未开启运行时编译时,视图引擎只会从程序集嵌入资源中查找预编译生成的视图,不会扫描本地Content类型的cshtml文件
  • 直接空初始化的DefaultHttpContext缺少应用根路径、请求基础路径等必要上下文,视图引擎无法正确拼接Views/Shared下的文件查找路径
  • 旧版本.NET Core默认会将输出目录下的Content视图纳入查找范围,该逻辑在.NET 6中默认关闭

修复方案

  • 启用Razor运行时编译
    首先通过Nuget安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包,在服务注册阶段添加运行时编译支持:

    // Program.cs 服务配置段
    builder.Services.AddControllersWithViews()
        .AddRazorRuntimeCompilation();
    

    非Web宿主场景(比如控制台/类库中渲染视图),需要手动补全Razor相关服务注册,同时配置视图引擎的文件查找根路径:

    services.AddMvcCore()
        .AddRazorRuntimeCompilation(options =>
        {
            // 配置视图文件所在的根目录,即存放Views文件夹的路径
            options.FileProviders.Add(new PhysicalFileProvider(AppContext.BaseDirectory));
        });
    
  • 修正视图查找的上下文初始化逻辑
    不要直接空实例化DefaultHttpContext,补充必要的路径配置,修正后的代码片段如下:

    var env = _serviceProvider.GetRequiredService<IWebHostEnvironment>();
    var httpContext = new DefaultHttpContext
    {
        RequestServices = _serviceProvider,
        Request = { PathBase = "/" }
    };
    
    var actionContext = new ActionContext(
        httpContext, 
        new RouteData(), 
        new ActionDescriptor()
    );
    
    // 查找Shared目录下的视图时,直接传视图名称即可,不需要加路径前缀
    var viewEngineResult = _viewEngine.FindView(actionContext, viewName, isMainPage: false);
    
    // 调试阶段可加校验输出查找路径,快速定位路径配置问题
    if (!viewEngineResult.Success)
    {
        var errMsg = $"视图{viewName}未找到,已尝试查找路径:\n{string.Join("\n", viewEngineResult.SearchedLocations)}";
        throw new InvalidOperationException(errMsg);
    }
    
  • 校验项目文件配置
    确认.csproj中配置了视图文件的输出规则,确保编译后视图文件会被拷贝到输出目录对应路径:

    <ItemGroup>
        <Content Include="Views\**\*.cshtml" CopyToOutputDirectory="PreserveNewest" />
    </ItemGroup>
    

若不需要运行时修改视图文件,更推荐使用默认预编译模式:将视图的生成操作从Content改回默认的Razor编译项,让SDK自动生成包含预编译视图的view.dll,此时无需开启运行时编译即可正常查找视图,性能也更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:54:25