RazorEngine - 命名空间导入编译错误

时间:2011-05-16 11:59:12

标签: .net razor razorengine

我在非MVC环境中使用Razor Engine(razorengine.codeplex.com)。我编译存储在文件中的模板,并使用@inherits进行智能感知支持。

  • RazorEngine Assembly
  • 自定义程序集 - 引用RazorEngine,包含View<>并将View<>设置为基类
  • Web应用程序 - 引用RazorEngine,自定义程序集,包含.cshtml模板文件

所有cshtml文件都有以下@inherits指令:

@inherits View<SomeModel>

抛出错误:

  

找不到名称空间View的类型,是否缺少程序集引用?

我的web.config包含以下条目:

<add namespace="CustomAssembly.NamespaceContainingViewClass" />

我认为这与其他条目<assemblies>有关,其中未提及我的CustomAssembly。是这样的吗?我可以使用另一个程序集中包含的自定义基类进行编译吗?

P.S。我无法检索程序集的强名称,因为我的自定义程序集引用了一个没有强名称的3d方程序集...

堆栈跟踪:

at RazorEngine.Compilation.DirectCompilerServiceBase.CompileType(TypeContext context)
at RazorEngine.Templating.TemplateService.CreateTemplate(String template, Type modelType)
at RazorEngine.Templating.TemplateService.GetTemplate(String template, Type modelType, String name)
at RazorEngine.Templating.TemplateService.Compile(String template, Type modelType, String name)
at RazorEngine.Razor.Compile(String template, Type modelType, String name)

2 个答案:

答案 0 :(得分:6)

您可以在TemplateServiceConfiguration中添加命名空间:

    TemplateServiceConfiguration templateConfig = new TemplateServiceConfiguration();
    templateConfig.Namespaces.Add("MyNamespaceGoesHere"); 
    templateConfig.Resolver = new DelegateTemplateResolver(name =>
    {
       <My template resolve implementation>
    }
    Razor.SetTemplateService(new TemplateService(templateConfig));
    using (TextWriter tw = new StringWriter())
    {
      Razor.Resolve(viewName + ".cshtml", model).Run(new ExecuteContext(), tw);
      var emailHtmlBody = tw.ToString();
    }

答案 1 :(得分:1)

您可能需要将剃须刀配置部分添加到web.config

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <configSections>
        <section name="razorEngine" type="RazorEngine.Configuration.RazorEngineConfigurationSection, RazorEngine" requirePermission="false" />
    </configSections>
</configuration>

<razorEngine>
    <namespaces>
        <add namespace="CustomAssembly.NamespaceContainingViewClass" />
    </namespaces>
</razorEngine>