Турбина с db4objects.db4o.linq.dll дает невозможно загрузить одно или несколько из запрошенных типов исключением

StackOverflow https://stackoverflow.com/questions/1839241

Вопрос

В моем приложении ASP.NET-MVC я пытаюсь настроить турбину.
Код инициализации выглядит следующим образом:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
    }
}

и тогда у меня есть набор регистраторов, сравнимый со следующим:

public class UserRepositoryRegistration : IServiceRegistration
{
    public void Register(IServiceLocator locator)
    {
        locator.Register<IUserRepository, Db4oUserRepository>();
    }
}

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

Ошибка сервера в приложении '/'

Невозможно загрузить один или несколько запрашиваемых типов. Получить свойство LoadEREXCEPTIONS для получения дополнительной информации.

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

Детали исключения: System.Reflection.ReflectionTypeloadexception: невозможно загрузить один или несколько из запрошенных типов. Получить свойство LoadEREXCEPTIONS для получения дополнительной информации.

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

Трассировки стека:

    [ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
       System.Reflection.Module._GetTypesInternal(StackCrawlMark& stackMark) +0
       System.Reflection.Assembly.GetTypes() +105
       MvcTurbine.ComponentModel.DefaultAutoRegistrator.AutoRegister(ServiceRegistration serviceRegistration) +338
       MvcTurbine.Web.RotorContext.ProcessAutomaticRegistration(AutoRegistrationList registrationList) +155
       MvcTurbine.Web.RotorContext.AutoRegistrationForContext() +163
       MvcTurbine.Web.RotorContext.Turn() +37
       MvcTurbine.Web.TurbineApplication.ExecuteContext() +43
       MvcTurbine.Web.TurbineApplication.TurnRotor() +65
       MvcTurbine.Web.TurbineApplication.Application_Start(Object sender, EventArgs e) +85

ОБНОВИТЬ
Сузил библиотеку проблем до db4objects.db4o.linq.dll, как только у меня появится эта библиотека в качестве ссылки (даже не «использование», просто добавленные к ссылкам) в одной из моих библиотек, на которые ссылается в моем MVC WebPplication, я получаю Выше упомянутый ysod. Все остальные библиотеки DB4O работают просто отлично.

Mettre à Jour
Попробовал обмениваться UnityServiceLocator с WindsosserviceLocator и NinjectServiceLocator. Точно так же результаты, так что, скорее всего, проблема не возникает ни на одной из либеров.

Опкдадинг
Чтобы воссоздать страницу ошибки. Достаточно сделать следующие шаги:

  • Создайте новое приложение MVC (не имеет значения, версия Wat)
  • ALTER GLOABAL.ASAX.CS для использования MVCTURBINE и добавления необходимых MVCTURBINE LIBS
    Вы найдете, что все еще работает, как и ожидалось
  • Добавить db4objects.db4o.dll
    Все еще все работает
  • Добавить db4objects.db4o.linq.dll
    Ysod

Есть идеи о том, где и как отладить это?

Это было полезно?

Решение

Ради записи правильного ответа. Я думаю, что вы получаете TypelOadexception, вызванную неспособностью загрузить сборку, на которую ссылается db4objects.db4o.linq.

Глядя на это в ILDASM, показывает, что ему требуются следующие сборки, которые поставляются с DB4O (используйте те же сборки, которые поставлялись с db4objects.db4o.linq, чтобы избежать какого -либо несоответствия).

Эти собрания:

  • Mono.cecil
  • Cecil.flowanalysis

Для записи, ABD на сегодняшний день, они используются оптимизатором запроса LINQ для DB4O для анализа доступа к свойствам в запросах LINQ.

Другие советы

Чтобы турбина могла зарегистрировать ваши типы, она должна иметь сборку хостинга (db4objects.db4o.linq) и любые другие сборки, на которые может ссылаться сборка хостинга.

Трассировка стека в вашем исходном посте гласит, что при попытке разрешить типы для вашего приложения, что не удалось разрешить, чего в этом случае его нет.

Звучит как проблема с вашим целевым типом. Вы можете попробовать следующее:

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

Было бы полезно увидеть объявление и конструктор (ы) типа целевого типа.

Попробуйте переключиться на другой контейнер IOC:

Добавьте ссылку на mvcturbine.ninject.dll

Затем:

public class MvcApplication : TurbineApplication
{
    static MvcApplication()
    {
        //ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());           
        ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator()); 
    }
}

Джефф, MVC Turbine в настоящее время поддерживает только MVC 1.0, я нахожусь в процессе получения поддержки MVC 2.0 для .NET 3.5 и .NET 4.0. пожалуйста, проверьте http://turbineproject.com Для получения информации, когда они будут освобождены.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top