ASPNet Core 2.1加载预编译视图的正确方法

时间:2018-08-27 13:58:11

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

我试图在应用程序中添加类似功能的插件,并且很难找到预编译的视图。 所以可以说我有一个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并发现视图的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我花了一整天使它工作..并且它起作用了。

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

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

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

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

var viewAssemblyPart = new CompiledRazorAssemblyPart(viewAssembly);

最后但并非最不重要的一点-将其添加到其他提供程序的集合中:

MVC_BUILDER.PartManager.ApplicationParts.Add(viewAssemblyPart);

享受!

特别感谢github上的消息:)