RazorEngine - 如果仅在视图中使用,则不会加载引用的程序集

时间:2013-03-05 08:46:02

标签: .net asp.net-mvc razor

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

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

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

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

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

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

真的有两个问题。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

<configSections>
  <section name="razorEngine" type="RazorEngine.Configuration.RazorEngineConfigurationSection, RazorEngine" requirePermission="false" />
</configSections>
<razorEngine>
  <namespaces>
    <add namespace="..." />
  </namespaces>
</razorEngine>
相关问题