我试图在应用程序中添加类似功能的插件,并且很难找到预编译的视图。 所以可以说我有一个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并发现视图的正确方法是什么?
答案 0 :(得分:1)
我花了一整天使它工作..并且它起作用了。
在Web应用程序中,razor从预编译视图中知道了哪里,但是在控制台应用程序中却不知道(也许是我的错)。让我们帮助他:)
首先,我们需要带有视图的程序集名称:
var viewAssembly = PLUGIN_ASSEMBLY.GetName().Name + ".Views";
第二,我们应该创建提供程序,它将从程序集中提取所有已编译的视图:
var viewAssemblyPart = new CompiledRazorAssemblyPart(viewAssembly);
最后但并非最不重要的一点-将其添加到其他提供程序的集合中:
MVC_BUILDER.PartManager.ApplicationParts.Add(viewAssemblyPart);
享受!
特别感谢github上的消息:)