【问题标题】:ASPNet Core 2.1 correct way to load precompiled viewsASPNet Core 2.1 加载预编译视图的正确方法
【发布时间】:2018-08-27 13:58:11
【问题描述】:

我正在尝试向我的应用程序添加类似插件的功能,并且很难找到预编译的视图。 所以可以说我有一个 Razor 类库,它编译为 plugin.dll 和 plugin.views.dll 我已成功加载并添加 plugin.dll

Assembly PLUGIN_ASSEMBLY = null;
                            try
                            {
                                PLUGIN_ASSEMBLY = Assembly.LoadFile(PLUGIN.PluginFileName);
                                Assembly.LoadFile(PLUGIN.PluginViewsFileName);
                            }
                            catch (FileLoadException)
                            {
                                throw;
                            } 

然后用

添加程序集
MVC_BUILDER.AddApplicationPart(PLUGIN_ASSEMBLY);

然后我添加插件基本路径,以便发现其正常视图

MVC_BUILDER.AddRazorOptions(o =>
                        {
                            IFileProvider physicalProvider = new PhysicalFileProvider(PLUGIN.BasePath);
                            IFileProvider compositeProvider = new CompositeFileProvider(physicalProvider);
                            o.FileProviders.Add(compositeProvider);
                        });

除了我只能使用物理位置的视图而不是 plugin.views.dll 中的视图之外,以上所有操作都很好

添加 views.dll 并使视图被发现的正确方法是什么?

【问题讨论】:

    标签: c# razor asp.net-core-mvc asp.net-core-mvc-2.1


    【解决方案1】:

    我花了一整天的时间让它工作..它工作了。

    在 web 应用程序中,razor 知道从哪里获取预编译视图,但在控制台应用程序中却不知道(也许是我的错)。让我们帮助他:)

    首先,我们需要带有视图的程序集名称:

    var viewAssembly = Assembly.Load(PLUGIN_ASSEMBLY.GetName().Name + ".Views");
    

    其次,我们应该创建提供程序,它将从程序集中提取所有已编译的视图:

    var viewAssemblyPart = new CompiledRazorAssemblyPart(viewAssembly);
    

    最后但同样重要的是 - 将其添加到其他提供者的集合中:

    MVC_BUILDER.PartManager.ApplicationParts.Add(viewAssemblyPart);
    

    享受吧!

    特别感谢来自 github 的资源 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多