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

如何通过RazorFormat从独立类库加载视图?

如何通过RazorFormat从独立类库加载视图?

当然可以!我来给你梳理几种靠谱的方法,帮你顺利从独立类库加载Razor视图:

方法一:通过嵌入式资源加载

这是最常用的方式,适合把视图打包到类库dll里的场景:

  1. 先处理类库中的视图文件:选中每个.cshtml视图文件,右键打开属性面板,把生成操作改成「嵌入式资源」。
  2. 在主项目中配置EmbeddedFileProvider,关联类库的程序集,示例代码如下:
// 获取类库的程序集,替换成你类库中实际存在的任意类型
var pluginAssembly = typeof(YourClassLibrary.SomeClass).Assembly;

Plugins.Add(new RazorFormat()
{
    FileProvider = new CompositeFileProvider(
        // 第二个参数是视图所在的命名空间,格式为:类库根命名空间 + 视图文件夹路径
        new EmbeddedFileProvider(pluginAssembly, "YourClassLibrary.Views"),
        // 保留默认文件提供者,确保主项目自身的视图能正常加载
        RazorFormat.DefaultFileProvider
    )
});

要注意哦,这里的命名空间必须和视图文件的嵌入路径对应——比如你的类库根命名空间是MyPluginViews,视图都放在Views文件夹下,那命名空间就是MyPluginViews.Views;如果视图在Views/Home子文件夹里,对应的嵌入式资源路径就是MyPluginViews.Views.Home,配置时一定要匹配准确。

方法二:通过物理文件路径加载

如果你的类库视图是作为物理文件存在(没有嵌入到dll),可以直接配置ViewLocations:

// 替换成你类库视图的实际物理路径
var classLibViewPaths = new List<string>
{
    "/YourClassLibraryPhysicalPath/Views/{1}/{0}.cshtml",
    "/YourClassLibraryPhysicalPath/Views/Shared/{0}.cshtml"
};

Plugins.Add(new RazorFormat()
{
    // 把类库视图路径和默认路径合并,别直接覆盖默认路径,否则主项目视图会找不到
    ViewLocations = RazorFormat.DefaultViewLocations.Concat(classLibViewPaths).ToList()
});

这里建议用绝对路径,避免相对路径解析出错;同时一定要保留默认的ViewLocations,不然主项目自己的视图就没法正常加载啦。

额外小提示

  • 类库的视图结构要遵循Razor的约定:比如对应HomeController的视图要放在Views/Home文件夹下,共享视图放在Views/Shared里。
  • 如果用嵌入式资源,你可以在类库的AssemblyInfo.cs里添加[assembly: NeutralResourcesLanguage("en")],避免资源加载的区域性问题,不过核心还是要确保命名空间匹配正确。

备注:内容来源于stack exchange,提问作者Barry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:55:27