Turbina con Db4objects.Db4o.Linq.dll da No se puede cargar uno o más de los tipos de excepción solicitada

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

Pregunta

En mi aplicación asp.net-mvc que estoy tratando de establecer la turbina.
El código de inicialización es el siguiente:

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

y tengo entonces un conjunto de registradores comparable a la siguiente:

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

Si trato de correr, me sale el siguiente error en algún lugar después de la SetLocatorProvider, pero antes de entrar en cualquiera de los métodos de registro:

  

Error de servidor en la aplicación '/'.

     

No se puede cargar uno o más de los tipos solicitados. Recuperar la propiedad LoaderExceptions para más información.

     

Descripción: Excepción no controlada durante la ejecución de la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

     

Detalles de excepciones: System.Reflection.ReflectionTypeLoadException: No se puede cargar uno o más de los tipos solicitados. Recuperar la propiedad LoaderExceptions para más información.

     

Error de origen:   Una excepción no controlada se generó durante la ejecución de la solicitud Web actual. La información sobre el origen y la ubicación de la excepción pueden identificarse utilizando la pila de excepción traza a continuación.

     

Seguimiento de la pila:

    [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

Actualizar
Reducido a la biblioteca problema Db4objects.Db4o.Linq.dll Tan pronto como tengo esta biblioteca como referencias (ni siquiera el "uso", se agregó a las referencias) en una de mis bibliotecas que se hace referencia en mi aplicación web MVC consigo el mencionado YSOD anteriormente. Todas las demás bibliotecas DB4O funcionan bien.

METTRE à jour
Intentado intercambiar el UnityServiceLocator con el WindsosServiceLocator y la NinjectServiceLocator. Exacta mismos resultados, por lo que más que probable que el problema no se origina en una de las librerías.

OPPDATERING
Para volver a crear la página de error es suficiente con dar los siguientes pasos:

  • Crear nueva aplicación MVC (no importa la versión wat)
  • código de Alter gloabal.asax.cs utilizar MvcTurbine y añadir librerías MvcTurbine necesarios
     Usted encontrará todo sigue funcionando como se esperaba
  • Añadir Db4objects.Db4o.dll
     Aún así todo funciona
  • Añadir Db4objects.Db4o.linq.dll
     YSOD

¿Alguna idea sobre dónde y cómo depurar esto?

¿Fue útil?

Solución

En aras de escribir una respuesta adecuada. Creo que usted está recibiendo un TypeLoadException provocado por un fallo en la carga un ensamblado que se hace referencia por Db4objects.Db4o.Linq.

Mirando en ildasm muestra que requiere los siguientes conjuntos que se envían con db4o (utilizar los mismos conjuntos que vienen con Db4objects.Db4o.Linq para evitar cualquier falta de coincidencia).

Estos montajes son:

  • Mono.Cecil
  • Cecil.FlowAnalysis

Para el registro, Abd al día de hoy, están acostumbrados por el LINQ a db4o optimizador de consultas para analizar las propiedades de acceso en las consultas LINQ.

Otros consejos

A fin de que la turbina dar de alta sus tipos, se debe tener el conjunto de alojamiento (Db4objects.Db4o.Linq) y cualquier otra asambleas que el montaje de alojamiento podría hacer referencia.

El seguimiento de pila en su post original dice que cuando se trata de resolver los tipos para su aplicación algo no pudo resolver, que en este caso no está presente.

Suena como un problema con el tipo de destino. Usted puede tratar lo siguiente:

  1. Eliminar todos los registros de servicio y probarlos uno a la vez para determinar del tipo que está causando el problema.
  2. Asegúrese de que puede con éxito una instancia del tipo de destino usted mismo.
  3. Compruebe que el tipo de destino no lo hace para cualquier tipo de dependencias que están no cuenta en su servicio registros.

Sería de gran ayuda para ver la declaración y el constructor (s) del tipo (s) de destino.

Trate de cambiar a otro IoC Container:

Añadir una referencia a MvcTurbine.Ninject.dll

A continuación:

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

Jeff, MVC Turbina actualmente sólo es compatible con MVC 1.0, estoy en el proceso de conseguir el apoyo MVC 2.0 tanto para .NET 3.5 y .NET 4.0. Por favor, compruebe http://turbineproject.com información cuando van a ser liberados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top