2013-07-24 2 views
0

У меня проблема с внешними видами бритвы. В моем проекте у меня есть основная сборка mvc и динамически загружаемые сборки библиотеки классов (из БД) с их собственными контроллерами, представлениями и моделями. Эти сборки напрямую не привязаны и не загружаются во время выполнения.Внешний вид бритвы не может видеть внешние модели

Я смог сделать всю работу системы, создав фабрику настраиваемых контроллеров для контроллеров, специализированного поставщика виртуальных путей для Views. Представления представляют собой встроенные ресурсы в моих внешних сборках.

Проблема заключается в том, что когда я создаю строго типизированный внешний вид с классом модели из внешней сборки, представление не может быть скомпилировано во время выполнения, потому что сборка не передается компилятору бритвы. Таким образом, я получаю следующее сообщение об ошибке:

Compiler Error Message: CS0234: The type or namespace name 'MyPlugin' does not exist in the namespace 'MyNamespace' (are you missing an assembly reference?)

Source Error:

public class 
_Page_ExternalViews_MyController_MyAction_cshtml : System.Web.Mvc.WebViewPage<MyNamespace.MyPlugin.Models.MyModel> 
{ 

Он отлично работает, когда я использую динамическую модель, модель класса от моего основного веб-узла или узлов ссылки непосредственно в веб-проекте. Я точно знаю, что внешняя сборка загружается перед компиляцией внешних бритв, поскольку мои контроллеры работают нормально.

Я начал изучать проект RazorGenerator, чтобы предварительно скомпоновать мои внешние представления, но не смог добиться какого-либо прогресса (ничего не генерируется), и я даже не уверен, что я смотрю в правильном направлении, так как мой сборки загружаются во время выполнения, и я должен использовать собственные ViewEngine и ControllerFactory.

+0

Вы пробовали либо из перечисленных здесь вариантов: http://stackoverflow.com/questions/4953330/razor-based-view-doesnt-see -referenced-assemblies –

+0

@Brent Я не могу ссылаться на свои сборки в web.config, потому что они недоступны до запуска веб-приложения. В противном случае, да, это решило бы проблему. –

+0

@Maskim Сколько внешних сборок вы ссылаетесь? Это только один, или их несколько? –

ответ

0

я смог прекомпилировать мнениями с RazorGenerator расширением Visual Studio (не RazorGenerator.Mvc один) в моих сборках.

Он в основном преобразует .cshtml просмотров бритвы в .cs файлов с WebViewPage классов перед сборкой. И в моем веб-проекта я должен был реализовать собственный VirtualPathProviderViewEngine похож на this one

1

Попробуйте использовать директиву использования в своих представлениях в динамической сборке.

@using MyNamespace.MyPlugin.Models; 
@using MyNamespace.MyPlugin; 

и т.д.

+0

Нет, это не помогает. Когда представления компилируются по какой-то причине, они не знают о моей внешней сборке. –

+0

Вы загружаете его в тот же домен приложения? –