2013-03-05 4 views
3

Я использую RazorEngine для выполнения некоторых шаблонов на уровне обслуживания вне контекста MVC, и у меня возникают проблемы с сборками, которые не загружаются в AppDomain когда классы в этих сборках используются только в представлениях. Позвольте мне уточнить.RazorEngine - ссылочные сборки не загружаются, если они потребляются только в представлении

У меня есть некоторые шаблоны Razor, которые встроены в автономную сборку (назовем ее Assembly A).

Один из шаблонов (MyTemplate) потребляет класс утилиты (MyHelperClass), который находится в другой сборке (назовем его сборкой B).

Сборка A имеет жесткую ссылку на сборочные B.

Когда я пытаюсь разобрать шаблон, который ссылается MyHelperClass я получаю знакомые, «Вы не нашли с помощью директивы или пространства имен сборки». Когда я отлаживаю и смотрю окно модулей в Visual Studio, я вижу, что сборка B не загружается в AppDomain. Если я отлаживаю код и загружаю сборку через промежуточное окно перед неудачной строкой кода, он работает.

Итак, кажется, что простое потребление в представлении недостаточно для платформы .NET для загрузки сборки в AppDomain. Я предполагаю, что это вполне может быть и в стандартном проекте MVC, хотя я не тестировал это.

Два вопроса на самом деле.

  1. Является ли ссылкой в ​​представлении недостаточно, чтобы заставить среду загрузки загрузить сборку?
  2. В этой ситуации, что является лучшим способом заставить эту сборку загружаться без необходимости прибегать к Assembly.Load или ссылаться на фиктивный класс.

ответ

1

Объявить пространство имен MyHelperClass в web.config:

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

В конце концов я решил, что во время выполнения компиляция для этих шаблонов была слишком хрупкой и возможность иметь этот урожай в будущем сделали мне очень непросто. Вместо этого я решил поменять свой проект на использование пакета RazorGenerator NuGet и предварительно скомпилировал представления, чтобы избежать сюрпризов во время выполнения.