2013-07-21 2 views
2

У меня есть проект MVC 4, где я загружаю представления из динамически загружаемых сборок. Это работает отлично, если я не использую строго типизированные представления, поскольку в этом случае я получаю исключение «Тип или пространство, не найденное».CurrentDomain.AssemblyResolve not hit from Razor view

Затем я попытался добавить AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; в мой Application_Start, но это событие никогда не попадает, чтобы разрешить сборку, найденную в режиме просмотра бритвы.
Такая же проблема существует и для ресурсов, но там она просто использует базовую культуру и, по крайней мере, не падает.

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

Кто-нибудь знает, как разрешить сборки, используемые в представлениях Razor?

Сейчас я использую dirty hack путем копирования сборки в /bin папку, которая в основном работает, но производит некоторые другие проблемы, кроме неоспоримого just a ugly hack.
Я также пробовал AppendPrivatePath, что также не помогло для просмотров бритвы.

ответ

1

Я нашел решение в http://shazwazza.com/post/Developing-a-plugin-framework-in-ASPNET-with-medium-trust:

  • добавить частный путь к web.config
  • добавить PreApplicationStartMethod и выполните следующие действия в этом методе:
  • копию всех плагинов библиотеки DLL в папке связаны как частный путь выше
  • нагрузки на узлы с помощью Assembly.Load(path) и добавить их к BuildManager через BuildManager.AddReferencedAssembly(a);

Теперь двигатель бритвы способен загружать типы из этих сборок.