【问题标题】:Rendering Views from external assemblies in MVC6在 MVC6 中从外部程序集渲染视图
【发布时间】:2020-01-25 01:25:09
【问题描述】:

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

它导入的项目找到控制器find,并正常执行其中的代码,但是找不到视图,显示此错误

【问题讨论】:

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


【解决方案1】:

要从单独的程序集中加载视图,您需要 EmbeddedFileProviderCompositeFileProvider。我在这里提供了有关如何使用这些的更多信息:https://stackoverflow.com/a/34366119/188740

【讨论】:

    【解决方案2】:

    如果您查看错误,您会看到它试图在与应用程序路径相关的Views 目录下查找视图。但是,您可以在 Mvc/Views 路径下查看直播。

    您可以尝试覆盖它。我不确定执行此操作的最简单和正确的方法是什么,但我想到的第一个想法是您可以提供一个 FileProvider here on RazorViewEngineOptions,它将 /Mvc 视为根文件夹。 Here is an example 关于如何配置它。

    【讨论】:

      【解决方案3】:

      我最终解决了这个问题,我相信这是一种令人难以置信的 hacky 方式。

      由于视图位于每个项目中的src 文件夹内,我将src\Branch.Web 中的Mvc 应用程序中的RazorViewEngine 根更改为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);
          });
      

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

      【讨论】:

        猜你喜欢
        • 2015-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 1970-01-01
        相关资源
        最近更新 更多