从bin目录之外的DLL加载控制器无法在Areas文件夹中找到视图

时间:2017-02-01 11:27:26

标签: c# asp.net-mvc asp.net-mvc-4 razor razorengine

我在MVC 4应用程序中有包含视图和内容的区域。我编写了一个PreApplicationStartMethod来调用,在应用程序启动时加载包含该区域控制器的DLL:

public static class Initializer
    {
        public static void Initialize()
        {
            var AreasFolder = new DirectoryInfo(HostingEnvironment.MapPath("~/Areas"));
            var PluginAssemblies = AreasFolder.GetFiles("*.dll", SearchOption.AllDirectories);
            foreach(var PluginAssembly in PluginAssemblies)
            {
                var Asm = Assembly.LoadFrom(PluginAssembly.FullName);
                BuildManager.AddReferencedAssembly(Asm);
            }
        }
    }

这成功加载了DLL,一切正常,因为我预计会遇到一个问题 - 找不到在bin目录之外的dll中加载的控制器的视图,并且我提供了标准"视图' x'或者找不到它的主人,或者现在查看引擎支持搜索到的位置..."但是在搜索到的位置,我可以看到视图的路径:

~/Areas/[Area Name]/Views/[Controller Name]/[View].cshtml 

我的想法让我想到,当控制器将波形符号映射到不同于DLL在bin目录中时的位置,但我不确定如何最好地诊断。

我已尝试将其余的应用程序视图移动到Areas / Views文件夹中,看看是否是无法解析的布局,我也尝试过将Views文件夹中的视图复制到应用程序的根目录中以查看是否有效,但这两个操作都产生了与以前相同的异常。

有趣的是,如果我对视图有一个破坏的引用,我将得到该异常消息而不是"无法找到视图"异常,所以似乎MVC 找到了视图,但由于某种原因无法渲染它?

0 个答案:

没有答案