由于它如何找到控制器,我能够从MVC6中的外部程序集加载控制器。但是我无法渲染同样在该程序集中的视图,因为它说它无法找到。包含视图和控制器的程序集如下所示:
导入的项目找到控制器查找,并在其中执行完好的代码,但后来找不到视图,显示此错误
答案 0 :(得分:2)
如果查看错误,您将看到它尝试在_totals
目录下查找与应用程序路径相关的视图。但是,您在Views
路径下查看了实时。
您可以尝试覆盖此内容。我不确定最简单和正确的方法是什么,但我想到的第一个想法是你可以提供一个FileProvider here on RazorViewEngineOptions
,它将Mvc/Views
视为根文件夹。 Here is an example了解如何配置此功能。
答案 1 :(得分:2)
要从单独的程序集加载视图,您需要EmbeddedFileProvider
和CompositeFileProvider
。我在这里提供了有关如何使用这些内容的更多信息:https://stackoverflow.com/a/34366119/188740
答案 2 :(得分:1)
我最终解决了这个问题,我相信这是一种令人难以置信的hacky方式。
由于视图位于每个项目中,在src
文件夹中,我将RazorViewEngine根目录从src\Branch.Web
中的Mvc应用程序更改为src
。因此,每个视图都必须以项目名称为前缀,例如Branch.Game.Halo4
。要启用此功能,我只需在ConfigureServices
Startup.cs
中执行此代码即可
services.AddMvc().ConfigureRazorViewEngine(options =>
{
var oldRoot = ApplicationEnviroment.ApplicationBasePath;
var trimmedRoot = oldRoot.Remove(oldRoot.LastIndexOf('\\'));
options.FileProvider = new PhysicalFileProvider(trimmedRoot);
});
它并不完美,但它确实有效。