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

.NET6.0中如何配置IRazorViewEngine搜索其他程序集中的视图

.NET 6 跨程序集检索Razor视图解决方案

第一步:配置存储Razor视图的引用类库

首先修改存放公共Razor视图的类库的csproj文件:

  • 将Sdk属性从Microsoft.NET.Sdk改为Microsoft.NET.Sdk.Razor
  • 添加Razor相关配置,将视图文件设为嵌入资源,示例配置如下:
<Project Sdk="Microsoft.NET.Sdk.Razor">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
    <EmbeddedResourceInclude>Views/**/*.cshtml</EmbeddedResourceInclude>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
</Project>
  • 确保类库内的视图文件夹结构和主项目保持一致,遵循Views/控制器名/视图名.cshtml的通用结构即可

第二步:配置主项目

2.1 调整主项目csproj配置

你当前的主项目已经引入了Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation、Microsoft.Extensions.FileProviders.Embedded两个必要依赖,无需额外修改包引用,仅需确认如果主项目是控制台转Web项目,要补充Microsoft.AspNetCore.App框架引用,原生Web项目无需调整。

2.2 注册服务时指定检索的程序集

在Program.cs中注册Razor相关服务时,添加存储视图的外部程序集即可,示例代码如下:

var builder = WebApplication.CreateBuilder(args);

// 替换为你引用的视图类库中任意存在的类,用来获取对应程序集实例
var externalViewAssembly = typeof(ExternalViewClassLib.SampleClass).Assembly;

builder.Services.AddControllersWithViews()
    .AddRazorRuntimeCompilation(options =>
    {
        // 将外部程序集的嵌入文件提供者加入检索列表
        options.FileProviders.Add(new EmbeddedFileProvider(externalViewAssembly));
    })
    .AddApplicationPart(externalViewAssembly); // 将外部程序集加入应用部件列表,Razor引擎会自动扫描其中的视图资源

// 其余服务注册逻辑保持不变
var app = builder.Build();

// 中间件配置逻辑保持不变
app.Run();

第三步:验证调用

配置完成后,原有查找视图的代码无需修改即可正常生效:

var viewResult = _razorViewEngine.FindView(actionContext, viewName, false);

如果仍检索失败,可将FindView的第三个参数改为true(允许检索页面视图)排查,或使用GetView方法指定视图完整路径确认路径规则是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:05