4

我正在使用 RazorEngine 在 MVC 上下文之外的服务层中执行一些模板,并且当这些程序集中的类仅在视图中使用时,我遇到了程序集未加载到 AppDomain 的问题。让我详细说明。

我有一些 Razor 模板,它们是独立程序集中的嵌入式资源(我们称之为程序集 A)。

其中一个模板 ( MyTemplate) 使用一个实用程序类 ( MyHelperClass),它驻留在另一个程序集中(我们称之为程序集 B)。

程序集 A 对程序集 B 有硬引用。

当我尝试解析引用的模板时,MyHelperClass我很熟悉,“您是否缺少 using 指令或程序集命名空间”。当我在 Visual Studio 中调试并查看模块窗口时,我可以看到程序集 B 未加载到 AppDomain 中。如果我通过代码进行调试并在代码失败之前通过中间窗口加载程序集,它就可以工作。

因此,对于 .NET 框架而言,仅在视图中使用似乎不足以将程序集加载到 AppDomain 中。我认为在标准 MVC 项目中也可能出现这种情况,尽管我没有对此进行测试。

真的是两个问题。

  1. 视图中的引用是否不足以导致运行时加载程序集?
  2. 在这种情况下,强制此程序集加载而不必诉诸Assembly.Load或引用虚拟类的最佳方法是什么。
4

2 回答 2

4

最后我认为这些模板的运行时编译太脆弱了,将来出现这种情况的可能性让我感到非常不安。相反,我决定更改我的项目以使用 RazorGenerator NuGet 包并预编译视图以避免任何运行时意外。

于 2013-03-14T11:28:14.943 回答
1

MyHelperClass在 web.config 中声明命名空间:

<configSections>
  <section name="razorEngine" type="RazorEngine.Configuration.RazorEngineConfigurationSection, RazorEngine" requirePermission="false" />
</configSections>
<razorEngine>
  <namespaces>
    <add namespace="..." />
  </namespaces>
</razorEngine>
于 2013-03-07T14:36:34.077 回答