我在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 找到了视图,但由于某种原因无法渲染它?