Turbina con Db4objects.Db4o.Linq.dll dà Impossibile caricare uno o più l'eccezione tipi richiesto
-
12-09-2019 - |
Domanda
Nella mia applicazione asp.net-mvc Sto cercando di creare turbina.
Il codice di inizializzazione è la seguente:
public class MvcApplication : TurbineApplication
{
static MvcApplication()
{
ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
}
}
e ho poi una serie di registrar paragonabile a quello seguente:
public class UserRepositoryRegistration : IServiceRegistration
{
public void Register(IServiceLocator locator)
{
locator.Register<IUserRepository, Db4oUserRepository>();
}
}
Se provo a correre, ottengo il seguente errore da qualche parte dopo la SetLocatorProvider, ma prima di entrare in uno qualsiasi dei metodi di registro:
Errore del server in '/' applicazione.
Impossibile caricare uno o più dei tipi richiesti. Recuperare la proprietà LoaderExceptions per ulteriori informazioni.
Descrizione: Un'eccezione non gestita durante l'esecuzione della richiesta Web corrente. Si prega di rivedere l'analisi dello stack per ulteriori informazioni sull'errore e dove ha avuto origine nel codice.
Dettagli eccezione: System.Reflection.ReflectionTypeLoadException: Impossibile caricare uno o più dei tipi richiesti. Recuperare la proprietà LoaderExceptions per ulteriori informazioni.
errore Origine: Un'eccezione non gestita veniva generata durante l'esecuzione della richiesta Web corrente. Per informazioni sull'origine e la posizione dell'eccezione può essere identificato utilizzando lo stack eccezione traccia di seguito.
Analisi dello stack:
[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
Aggiorna
Ristretto la biblioteca problema Db4objects.Db4o.Linq.dll
Appena ho questa libreria come riferimenti (nemmeno "utilizzando", appena aggiunto ai riferimenti) in una delle mie librerie che viene fatto riferimento nel mio webapplication mvc ho la suddetta YSOD. Tutte le altre librerie db4o funzionano bene.
mettre À JOUR
Ho provato scambiando l'UnityServiceLocator con la WindsosServiceLocator e la NinjectServiceLocator. Esattamente lo stesso risultato, quindi più che probabile che il problema non ha origine in una delle librerie.
OPPDATERING
Per ricreare la pagina di errore è sufficiente adottare le seguenti misure:
- Crea nuova applicazione MVC (non importa la versione wat)
- Codice Alter gloabal.asax.cs utilizzare MvcTurbine e aggiungere librerie MvcTurbine necessari
Troverete tutto ancora funziona come previsto - Aggiungi Db4objects.Db4o.dll
Ancora tutto funziona - Aggiungi Db4objects.Db4o.linq.dll
YSOD
Tutte le idee su dove e come eseguire il debug di questo?
Soluzione
Per il bene di scrivere una risposta adeguata. Credo che stai ricevendo un TypeLoadException innescato da un fallimento per caricare un assembly a cui fa riferimento Db4objects.Db4o.Linq.
Guardando in ildasm dimostra che sono necessari i seguenti gruppi forniti con db4o (utilizzare gli stessi assiemi fornite con Db4objects.Db4o.Linq per evitare eventuali disallineamenti).
Queste assemblee sono:
- Mono.Cecil
- Cecil.FlowAnalysis
Per la cronaca, abd ad oggi, sono utilizzati dal LINQ to db4o Query Optimizer per analizzare le proprietà di accesso a query LINQ.
Altri suggerimenti
Al fine di turbina per registrare i tuoi tipi, ha bisogno di avere il gruppo di hosting (Db4objects.Db4o.Linq) ed eventuali altre assemblee che l'assemblea di hosting potrebbe fare riferimento.
L'analisi dello stack nel tuo post originale dice che quando si cerca di risolvere i tipi per la vostra applicazione qualcosa non è riuscito a risolvere, che in questo caso non è presente.
Suona come un problema con il tipo di target. Si potrebbe provare il seguente:
- Rimuovi tutte le registrazioni di servizio e provarli uno alla volta per determinare il tipo che causa il problema.
- garantire che si può con successo istanziare il tipo di destinazione te stesso.
- Verificare che il tipo di destinazione non lo fa avere altre dipendenze che sono non contabilizzati nel vostro servizio registrazioni.
Sarebbe utile vedere la dichiarazione e costruttore di (s) del tipo di destinazione (s).
Provare a passare ad un altro contenitore IoC:
Aggiungere un riferimento alla MvcTurbine.Ninject.dll
Quindi:
public class MvcApplication : TurbineApplication
{
static MvcApplication()
{
//ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
ServiceLocatorManager.SetLocatorProvider(() => new NinjectServiceLocator());
}
}
Jeff, MVC Turbina attualmente supporta solo MVC 1.0, sono in procinto di ottenere il sostegno MVC 2.0 sia per .NET 3.5 e .NET 4.0. Si prega di verificare http://turbineproject.com per informazioni quando saranno rilasciati.