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

C# ASPNet Core 2.1加载预编译视图的正确方法,c#,razor,asp.net-core-mvc,asp.net-core-mvc-2.1,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 = Asse

我正在尝试向我的应用程序添加一个插件式的功能,但很难找到预编译的视图。 假设我有一个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并使视图被发现的正确方法是什么?

我花了一整天的时间使它工作。。它成功了

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

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

var viewAssembly = Assembly.Load(PLUGIN_ASSEMBLY.GetName().Name + ".Views");
其次,我们应该创建提供程序,它将从程序集中提取所有编译的视图:

var viewAssemblyPart = new CompiledRazorAssemblyPart(viewAssembly);
最后,但并非最不重要的一点是,将其添加到其他提供者的集合中:

MVC_BUILDER.PartManager.ApplicationParts.Add(viewAssemblyPart);
享受吧

特别感谢来自github的消息来源:)