1

一些背景

我有一个为多个客户分发的闭源 asp.net MVC 应用程序。我正在尝试开发一个扩展,以包含一些非常具体的功能,这些功能将由单个客户使用(他也将拥有扩展源代码)。

我正在将扩展开发为另一个 mvc 项目,作为一个区域加载。我试图避免在主应用程序“/bin”文件夹中部署扩展二进制文件。

我正在主应用程序程序集的PreApplicationStartMethod中手动加载扩展程序集及其依赖项。区域注册过程顺利,区域路线按预期注册。

问题

当我尝试加载一些扩展页面时,我收到“未找到视图 'xx' 或其主控或没有视图引擎支持搜索到的位置。 ”消息。我调查了一下,并用“Hello”字符串替换了视图内容。视图已正确呈现。

我试图生成一个触发错误的最小值,结果证明它是'@model'指令。我试图弄清楚发生了什么,这是一个程序集加载错误。我使用“@model object”创建了一个最小视图,并尝试将模型转换为原始类型并收到以下错误消息:“无法加载文件或程序集 'xxx' 或其依赖项之一。系统找不到指定的文件. "(此程序集包含视图使用的类类型)

只是为了确认问题,我将提到的程序集移动到主应用程序“/bin”文件夹中,一切正常。

我还在控制器上插入了一些模型操作指令,只是为了调查是否会出现异常但一切正常,我什至可以使用 json 渲染网格。

我正在加载每个程序集:

var assembly = Assembly.LoadFrom(file)
BuildManager.AddReferencedAssembly(assembly)

我需要做一些额外的事情吗?

4

1 回答 1

1

需要添加程序集私有路径

AppDomain.CurrentDomain.AppendPrivatePath(pluginFolder);

不知道它的真正解释,但我想这与使用 Assembly.LoadFrom(file) 而不是 Assembly.Load() 以及视图稍后编译的事实有关。

于 2013-05-21T21:30:38.690 回答