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 이후에 다음 오류가 발생하지만 레지스터 메소드를 입력하기 전에 다음과 같습니다.

'/'응용 프로그램의 서버 오류.

요청 된 유형 중 하나 이상을로드 할 수 없습니다. 자세한 내용은 LoadeRexections 속성을 검색하십시오.

설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 내용은 스택 추적을 검토하십시오.

예외 세부 사항 : System.Reflection.reflectionTypeloadexception : 요청 된 유형 중 하나 이상을로드 할 수 없습니다. 자세한 내용은 LoadeRexections 속성을 검색하십시오.

소스 오류 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 예외의 원점 및 위치에 관한 정보는 아래의 예외 스택 추적을 사용하여 식별 할 수 있습니다.

스택 추적 :

    [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로 좁혔다 위에서 언급 한 ysod. 다른 모든 DB4O 라이브러리는 잘 작동합니다.

Mettre à jour
UnityServicelocator를 WindSosservicelocator 및 NinejectServicelocator로 바꾸려고했습니다. 똑같은 결과가 똑같은 결과 이후에 문제가 LIB 중 하나에서 발생하지 않을 가능성이 높습니다.

oppdatering
오류 페이지를 재현하려면 다음 단계를 수행하는 것으로 충분합니다.

  • 새 MVC 응용 프로그램 작성 (WAT 버전은 중요하지 않음)
  • mvcturbine을 사용하고 필요한 mvcturbine libs를 추가하려면 gloabal.asax.cs 코드 변경
    당신은 모든 것이 여전히 예상대로 작동한다는 것을 알게 될 것입니다
  • db4objects.db4o.dll을 추가하십시오
    여전히 모든 것이 작동합니다
  • db4objects.db4o.linq.dll을 추가하십시오
    ysod

이것을 어디서 어떻게 디버그하는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

적절한 답을 기록하기 위해. DB4OBJECTS.DB4O.LINQ에서 참조하는 어셈블리를로드하지 못하면 타자식이 발생한 것 같습니다.

ildasm에서 그것을 보면 DB4O가 제공되는 다음 어셈블리가 필요하다는 것을 보여줍니다 (불일치를 피하기 위해 db4objects.db4o.linq와 함께 제공되는 동일한 어셈블리를 사용하십시오).

그 어셈블리는 다음과 같습니다.

  • 모노. 세실
  • 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()); 
    }
}

Jeff, MVC Turbine은 현재 MVC 1.0 만 지원하고 있으며 .NET 3.5 및 .NET 4.0에 대한 MVC 2.0 지원을 받고 있습니다. 확인해주십시오 http://turbineproject.com 출시 될 때의 정보.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top