6

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

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

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

@inherits View<SomeModel>

抛出一个错误:

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

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

<add namespace="CustomAssembly.NamespaceContainingViewClass" />

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

ps 我无法检索程序集的强名称,因为我的自定义程序集引用了一个也没有强命名的 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)
4

2 回答 2

7

您可以在 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();
    }
于 2015-09-24T09:01:19.010 回答
1

您可能需要将 razor 配置部分添加到您的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>
于 2011-05-16T15:34:45.497 回答