从MVC6中的外部程序集渲染视图

时间:2015-05-13 00:58:35

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

由于它如何找到控制器,我能够从MVC6中的外部程序集加载控制器。但是我无法渲染同样在该程序集中的视图,因为它说它无法找到。包含视图和控制器的程序集如下所示:

导入的项目找到控制器查找,并在其中执行完好的代码,但后来找不到视图,显示此错误

3 个答案:

答案 0 :(得分:2)

如果查看错误,您将看到它尝试在_totals目录下查找与应用程序路径相关的视图。但是,您在Views路径下查看了实时。

您可以尝试覆盖此内容。我不确定最简单和正确的方法是什么,但我想到的第一个想法是你可以提供一个FileProvider here on RazorViewEngineOptions,它将Mvc/Views视为根文件夹。 Here is an example了解如何配置此功能。

答案 1 :(得分:2)

要从单独的程序集加载视图,您需要EmbeddedFileProviderCompositeFileProvider。我在这里提供了有关如何使用这些内容的更多信息: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);
    });

它并不完美,但它确实有效。