RazorEngine - Ошибка компиляции импорта пространства имен - PullRequest
5 голосов
/ 16 мая 2011

Я использую Razor Engine ( razorengine.codeplex.com ) в среде, отличной от MVC.Я компилирую шаблоны, которые хранятся в файлах, и использую @inherits для поддержки intellisense.

  • RazorEngine Assembly
  • Пользовательская сборка - ссылается на RazorEngine, содержит View<> и устанавливает View<> какbaseclass
  • Веб-приложение - ссылки RazorEngine, Custom Assembly, содержит файлы шаблонов .cshtml

Все файлы cshtml имеют следующую директиву @inherits:

@inherits View<SomeModel>

Выдается ошибка:

Тип представления пространства имен не найден, вам не хватает ссылки на сборку?

Мой файл web.config содержит следующую запись:

<add namespace="CustomAssembly.NamespaceContainingViewClass" />

Я думаю, это как-то связано с другой записью <assemblies>, где мой CustomAssembly не упоминается.Это тот случай?Могу ли я скомпилировать с моим пользовательским базовым классом, который содержится в другой сборке?

ps Я не могу получить строгое имя для сборки, поскольку моя пользовательская сборка ссылается на сборку сторонней организации, которая нестрогое имя либо ...

Stacktrace:

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 ]

6 голосов
/ 24 сентября 2015

Вы можете добавить пространство имен в 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 голос
/ 16 мая 2011

Возможно, вам нужно добавить раздел конфигурации бритвы к вашему 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>
...