【问题标题】:RazorEngine - Referenced assemblies are not loaded if only consumed in a viewRazorEngine - 如果仅在视图中使用,则不会加载引用的程序集
【发布时间】:2013-03-05 08:46:02
【问题描述】:

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

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

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

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

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

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

真的有两个问题。

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

【问题讨论】:

    标签: .net asp.net-mvc razor


    【解决方案1】:

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

    【讨论】:

    • 差不多 8 年后,我处于类似的位置。通过 Visual Studio 和作为应用程序在本地一切正常,但是一旦我尝试在 3rd 方系统中使用 DLL,一切都会崩溃。 RazorEngine 的任何文档都没有帮助:/。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 2017-01-13
      • 2010-11-09
      相关资源
      最近更新 更多