【问题标题】:Cannot use MvcHtmlString/IHtmlString with RazorEngine无法将 MvcHtmlString/IHtmlString 与 RazorEngine 一起使用
【发布时间】:2013-06-14 09:31:26
【问题描述】:

我刚开始使用 RazorEngine,但在使用静态辅助方法时遇到了问题。它只是为模板生成一个 MvcHtmlString/IHtmlString。当调用 Razor.Parse(...) 我得到

RazorEngine.Templating.TemplateCompilationException : Unable to compile template. 
Der Typ 'System.Web.IHtmlString' ist in einer nicht referenzierten Assembly definiert. (not referenced)
Fügen Sie einen Verweis auf die Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' hinzu.

我添加了对System.WebSystem.Web.MvcSystem.Web.WebPages 的引用。还尝试将它们添加到 cshtml (@using System.Web, @using System.Web.Mvc)。 但是@using System.Web.Mvc 导致.MvcSystem.Web 中不可用?!

我目前正在尝试在 NUnit 测试中构建模板。

【问题讨论】:

  • 好的,如果我在代码中创建 MvcHtmlString,然后再尝试 Parse 模板,它就可以工作。因此,在 Razor 模板中使用之前,可能必须先在 C# 代码中使用 System.Web.Mvc 命名空间中的某些内容?
  • 我也遇到了同样的问题,你找到解决办法了吗?谢谢
  • 有人在这里回答我:stackoverflow.com/a/23496144/1875786

标签: c# nunit razorengine


【解决方案1】:

RazorEngine 有一个类 CompilerServicesUtility。这负责在编译视图时加载和使程序集可用。它默认返回当前 AppDomain 中加载的所有程序集。

对于查看代码的人来说有点不直观,但确保 Razor 视图编译并且可以使用 MvcHtmlString 的一种方法是使用 AppDomain 将 System.Web 和 System.Web.Mvc 程序集加载到当前 AppDomain。 Current.Load("") 在执行/编译您的视图之前。

【讨论】:

  • 对应用程序领域的东西缺乏经验。我已经努力了 5 个小时才弄清楚这一点。当你有一个很棒的库和一个糟糕的文档时,就会发生这种情况!非常感谢
【解决方案2】:

一个老问题。 @Gopal 有正确的答案。除了添加以下代码之外,我还必须将 System.Web 的引用设置为复制本地。

AppDomain.CurrentDomain.Load("System.Web");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2013-07-30
    • 2014-11-23
    相关资源
    最近更新 更多