Impossibile caricare il file o l'assembly 'System.Data.SQLite'
Domanda
Ho installato ELMAH 1.1 .Net 3.5 x64 nel mio progetto ASP.NET e ora sto ottenendo questo errore (ogni volta che provo a vedere qualsiasi pagina):
Impossibile caricare il file o l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.
Descrizione: eccezione non gestita durante l'esecuzione della corrente web richiesta. Si prega di rivedere l'analisi dello stack Per ulteriori informazioni sull'errore e dove ha avuto origine nel codice.
Dettagli eccezione: System.BadImageFormatException: Could Non caricare file o l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.
Maggiori dettagli errore nella parte inferiore.
La mia piattaforma soluzione attiva è "Qualsiasi CPU" e sto in esecuzione su un x64 di Windows 7 su un x64, naturalmente, processore. Il motivo per cui stiamo usando questa versione di ELMAH è perché 1,0 Net 3.5 (x86, che è l'unica piattaforma per la quale è stato compilato) ci ha dato lo stesso errore sul nostro server Windows x64.
Ho provato la compilazione per x86 e x64 e ottengo lo stesso errore. Ho provato a rimuovere l'uscita tutta compilatore (bin e obj). Infine ho fatto un riferimento al SQLite dll direttamente, cosa che non era necessario per il progetto di lavorare su server e ho questo errore di compilazione:
Errore 1 Avvertenza come errore: generazione Assembly - assemblaggio obiettivi 'System.Data.SQLite.dll' un processore diverso MyProject di riferimento
Tutte le idee che potrebbe essere il problema?
Maggiori dettagli errore:
Errore Origine:
un'eccezione non gestita è stata generata durante l'esecuzione della corrente richiesta web. Le informazioni relative al origine e la posizione dell'eccezione può essere identificato tramite l'eccezione Analisi dello stack di seguito.
Analisi dello stack:
[BadImageFormatException: Impossibile file di caricamento o di montaggio 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codebase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, booleano throwOnFileNotFound, booleano forIntrospection) +0
System.Reflection.Assembly.nLoad (AssemblyName fileName, String codebase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, booleano throwOnFileNotFound, booleano forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, booleano forIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark & stackMark, booleano forIntrospection) 142 System.Reflection.Assembly.Load (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, booleano starDirective) 46[ConfigurationErrorsException: Could Non caricare file o l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String AssemblyName, booleano starDirective) 613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () 203 System.Web.Configuration.CompilationSection.LoadAssembly (AssemblyInfo AI) 105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) 178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configpath, booleano supportLocalization, String outputAssemblyName) +54
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (booleano isPrecompiledApp) 232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () 337[HttpException (0x80004005): Impossibile file di caricamento o di montaggio 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () 512 System.Web.Hosting.HostingEnvironment.Initialize (ApplicationManager AppManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) 729[HttpException (0x80004005): Impossibile file di caricamento o di montaggio 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' o una delle sue dipendenze. Un tentativo è stato fatto per caricare un programma con un formato non corretto.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext contesto) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext contesto) +85
System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) 259
Soluzione
System.Data.SQLite.dll
è un gruppo misto, cioè esso contiene sia codice gestito e codice nativo. Pertanto un particolare System.Data.SQLite.dll
è x86 o x64, ma mai entrambi.
Aggiorna ( cortesia J. Pablo Fernandez ): Cassini, il server di sviluppo web utilizzato da Visual Studio quando si preme F5 o fare clic sul «gioco» pulsante verde, è solo x86 che significa che, anche se la workstation è x64, sarete solo in grado di utilizzare la versione x86 di System.Data.SQLite.dll.
Un'alternativa non è quella di utilizzare Cassini ma IIS7 che è propriamente x64.
Altri suggerimenti
Assicurarsi che "Enable 32 - Applicazioni Bit". È impostato su false per il pool di app
Vai al IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.
Questo è molto semplice, se non si utilizza SQLite:
È possibile eliminare le DLL SQLite dalle cartelle bin soluzione, poi dalla cartella in cui si fa riferimento ELMAH. Ricostruire, e la vostra applicazione non cercherà di caricare questa DLL che non si sta utilizzando.
Ho una macchina dev 64 bit e server di compilazione a 32 bit. Ho usato questo codice prima di NHibernate inizializzazione. Funziona un fascino su qualsiasi architettura (ben il 2 ho provato)
Spero che questo aiuta qualcuno.
Guido
private static void LoadSQLLiteAssembly()
{
Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
FileInfo fi = new FileInfo(dir.AbsolutePath);
string binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL";
if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false);
}
private static string GetAppropriateSQLLiteAssembly()
{
string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL";
}
Come qualcuno che ha avuto a che fare con un bel paio di segnalazioni di bug su Roadkill Wiki con esattamente lo stesso problema, questo è quello che devi fare:
- Si sta utilizzando x64 o x86? SQLite è dotato di DLL per architetture separati - copiare quella giusta per la vostra cartella bin, ci sono due DLL per il fornitore ufficiale:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
- Se non ve la sentite di caccia in giro per queste assemblee, attivare la modalità a 32 bit per l'App Pool (una soluzione per macchine dev solo di solito)
- Se si ospitano in un server, è necessario il ridistribuibile Microsoft C ++ Runtime - non è installato sul Server 2008 R2 per impostazione predefinita. x64 versione , versione x86
E 'un vero e proprio dolore nel culo quanti cerchi si deve saltare attraverso quando ri-distribuire i binari SQLite NET, la mia soluzione per Roadkill, alla fine, è stato quello di copiare i file binari corretti nella cartella ~ / bin sulla base del architettura vostro usando. Purtroppo questo non risolve il problema ++ C runtime.
Ho risolto questo con l'installazione di System.Data.SQLite con l'estensione Nuget. Questa estensione può utilizzare per Visual Studio 2010 o superiore. In primo luogo, è necessario installare l'estensione Nuget. È possibile seguire qui:
- Vai a Visual Studio 2010, Menu -> Strumenti
- Seleziona Extension Manager
- Inserisci NuGet nella casella di ricerca e fare clic su Online Gallery. In attesa che Recuperare informazioni ...
- Selezionare la recuperata NuGet Package Manager, fare clic su Download. In attesa che Download ...
- Fare clic su Installa sul Visual Studio Extension Installer NuGet Package Manager. Attendere il completamento dell'installazione.
- Fare clic su Chiudi e 'Riavvia ora.
In secondo luogo, ora, è possibile installare SQLite:
- Vai UTENSILI Menu> Catalogo Pacchetto Manager-> Package Manager Console di Visual Studio.
- Quindi eseguire il comando install-pacchetto System.Data.SQLite in Console Package Manager. Come questo: eseguire il comando Install-Package System.Data.SQLite in Package Manager Console
E ora, è possibile utilizzare System.Data.SQLite.
Nel caso, si vedono due x64 cartella e, x86, queste cartelle contengono SQLite.Interop.dll. Ora vai alla proprietà finestre di quelle DLL e impostare l'azione costruttiva è il contenuto e copiare la directory di output è Copia sempre.
Quindi, questo è il mio modo.
Grazie. Kim Tho Pham, Hochiminh City, Vietnam. E-mail: tho.phamkim@gmail.com
Manuale montaggio System.Data.SQLite relative carico può risolvere questo.
di gatapia cambiato codice, come di seguito:
public static void LoadSQLLiteAssembly()
{
Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase);
FileInfo fi = new FileInfo(dir.AbsolutePath);
string appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly());
Assembly.LoadFrom(appropriateFile);
}
private static string GetAppropriateSQLLiteAssembly()
{
string pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");
string arch = ((String.IsNullOrEmpty(pa) || String.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64");
return "System.Data.SQLite.x" + arch + ".DLL";
}
ho ottenuto questo errore quando il nostro server Windows è stato convertito da 32 bit del sistema operativo a 64 bit. Il montaggio particolarmente gettando l'errore è stato impostato per la compilazione in modalità x86 (cioè 32 modalità). Sono passato a "Any CPU" e che ha fatto il trucco. È possibile modificare questo valore facendo quanto segue:
tasto destro del mouse sul progetto vai a Properties -> Build -> Platform Target -> change to "Any CPU"
Nel nostro caso non ha funzionato perché il nostro server di produzione è mancante
Microsoft Visual C ++ 2010 SP1 Redistributable Package (x86)
L'abbiamo installato e tutto il lavoro bene. Il pool di applicazioni deve avere abilitare le applicazioni a 32 bit impostata su true e si deve la versione x86 di biblioteca
Ho risolto questo, stranamente, installando System.Data.SQLite tramite l'applicazione Nuget GUI, in contrasto con la console di gestione dei pacchetti.
Installazione tramite la console non ha incluso le dipendenze questa libreria bisogno per funzionare.
Sono venuto con 2 soluzioni rapide. O lavorare per me. Credo che il problema è a causa dei permessi.
1) Invece di usare il file Elmah.dll dalla directory net-2.0, che ho usato Elmah.dll dalla rete-1.1.
2) Invece di mantenere Elmah.dll nella directory del progetto bin. Faccio una directory DLL per metterlo in.
Un altro modo per aggirare il problema è solo quello di aggiornare l'applicazione per ELMAH 1.2 invece di 1.1.
System.Data.SQLite
ha una dipendenza da System.Data.SQLite.interop
assicurarsi che entrambi i pacchetti sono la stessa versione e sono entrambi 86 .
Questa è una vecchia questione, ma ho provato tutto quanto sopra. Stavo lavorando su un strettamente 86 del progetto, in modo da non c'era due cartelle / 86, / 64. Ma per qualche motivo, il System.Data.SQLite
era una versione diversa da System.Data.SQLite.interop
, una volta ho tirato giù DLL il problema è stato risolto di corrispondenza.
Si può eliminare la cartella bin di debug e ricompilare di nuovo?
O controllare il progetto riferimento al System.Data.SQLite
, rintracciare dove si trova, quindi aprire la dll in riflettore. Se non è possibile aprirlo, ciò significa che il dll è danneggiato, si potrebbe desiderare di trovare un corretto o reinstallare il framework .NET.
Se si utilizza IIS Express come il web server sul computer di sviluppo vorrei cambiare a IIS locale. Questo ha funzionato per me.
Questo è un vecchio post, ma può aiutare alcune persone alla ricerca su questo errore per cercare di impostazione "Attiva applicazioni a 32 bit" a True per il pool di app. Questo è ciò che ha deliberato l'errore per me. Mi sono imbattuto in questa soluzione leggendo alcuni commenti a @ di beckelmw risposta.
È probabile che il pacchetto sbagliato installato. Si desidera che il pacchetto di prodotto da Microsoft che implementa lo System.Data.Common modello di provider.