J'ai installé ELMAH 1.1 .Net 3.5 x64 dans mon projet ASP.NET et maintenant j'obtiens cette erreur (chaque fois que j'essaye de voir une page):
Impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.
Description: une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.BadImageFormatException: impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.
Plus de détails sur l'erreur en bas.
Ma plate-forme Active Solution est "Any CPU" et j'exécute sur un x64 Windows 7 sur un x64, bien sûr, un processeur. La raison pour laquelle nous utilisons cette version d'ELMAH est que 1.0 .Net 3.5 (x86, qui est la seule plate-forme pour laquelle il est compilé) nous a donné cette même erreur sur notre serveur Windows x64.
J'ai essayé de compiler pour x86 et x64 et j'obtiens la même erreur. J'ai essayé de supprimer toutes les sorties du compilateur (bin et obj). Enfin, j'ai fait directement référence à la dll SQLite, quelque chose qui n'était pas nécessaire pour que le projet fonctionne sur le serveur et j'ai cette erreur de compilation:
Erreur 1 Avertissement comme erreur: Génération d'assembly - L'assembly référencé 'System.Data.SQLite.dll' cible un processeur différent MyProject
Des idées sur ce que pourrait être le problème?
Plus de détails d'erreur:
Erreur source:
Une exception non gérée a été générée lors de l'exécution de la requête Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de pile d'exceptions ci-dessous.
Trace de la pile:
[BadImageFormatException: impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrembly.Assection) +0
System.Reflection.Assection. .nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, Boolean forIntrospection) +127 System.Reflection.Assembly.InternalLoad (String assemblyString, Evidence assemblySecurity, StackCrawlMark & + stackMark, SystemRefection.Assembly. Load (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, booléen starDirective) +46[ConfigurationErrorsException: impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Webiguration .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean + outputAssemblies)
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevelFiles (337)[HttpException (0x80004005): impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutre, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment.Initialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hébergementParamètres) +729[HttpException (0x80004005): impossible de charger le fichier ou l'assembly 'System.Data.SQLite, Version = 1.0.61.0, Culture = neutre, PublicKeyToken = db937bc2d44ff139' ou l'une de ses dépendances. Une tentative de chargement d'un programme avec un format incorrect a été effectuée.]
System.Web.HttpRuntime.FirstRequestInit (contexte HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (contexte HttpContext) +85
System.Web.HttpRuntestime.Process ) +259
Réponses:
System.Data.SQLite.dll
est un assemblage mixte, c'est-à-dire qu'il contient à la fois du code managé et du code natif. Par conséquent, un particulierSystem.Data.SQLite.dll
est soit x86, soit x64, mais jamais les deux.Mise à jour ( avec la permission de J. Pablo Fernandez ): Cassini, le serveur web de développement utilisé par Visual Studio lorsque vous appuyez sur F5 ou cliquez sur le bouton vert «play», est uniquement x86 ce qui signifie que même si votre poste de travail est x64, vous ne serez capable d'utiliser la version x86 de System.Data.SQLite.dll.
Une alternative est de ne pas utiliser Cassini mais IIS7 qui est correctement x64.
la source
Assurez-vous que «Activer les applications 32 bits» est défini sur false pour le pool d'applications.
la source
Accédez au
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.la source
C'est très simple si vous n'utilisez pas SQLite:
Vous pouvez supprimer les DLL SQLite des dossiers bin de votre solution, puis du dossier où vous référencez ELMAH. Reconstruisez et votre application n'essaiera pas de charger cette DLL que vous n'utilisez pas.
la source
J'ai une machine de développement 64 bits et un serveur de construction 32 bits. J'ai utilisé ce code avant l'initialisation de NHibernate. Fonctionne à merveille sur n'importe quelle architecture (enfin les 2 que j'ai testées)
J'espère que cela aide quelqu'un.
Guido
la source
Dans notre cas, cela n'a pas fonctionné car notre serveur de production est manquant
Package redistribuable Microsoft Visual C ++ 2010 SP1 (x86)
Nous l'avons installé et tout fonctionne bien. Le pool d'applications doit avoir Activer les applications 32 bits défini sur true et vous devez utiliser la version x86 de la bibliothèque
la source
En tant que personne qui a dû faire face à pas mal de rapports de bogues sur Roadkill Wiki avec exactement le même problème, voici ce que vous devez faire:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
C'est une vraie douleur dans le cul combien de cerceaux vous devez sauter lors de la redistribution des binaires SQLite .NET, ma solution pour Roadkill à la fin était de copier les binaires corrects dans le dossier ~ / bin en fonction de l'architecture que vous utilisez . Malheureusement, cela ne résout pas le problème d'exécution C ++.
la source
J'ai résolu ce problème en installant System.Data.SQLite avec l'extension Nuget. Cette extension peut être utilisée pour Visual Studio 2010 ou version ultérieure. Tout d'abord, vous devez installer l'extension Nuget. Vous pouvez suivre ici:
Deuxièmement, maintenant, vous pouvez installer SQLite:
Et maintenant, vous pouvez utiliser System.Data.SQLite.
Dans le cas, vous voyez deux dossiers x64 et, x86, ces dossiers contiennent SQLite.Interop.dll. Maintenant, allez dans les fenêtres de propriétés de ces dll et définissez l'action de construction est le contenu et Copier dans le répertoire de sortie est toujours Copier.
Alors, c'est ma façon.
Merci. Kim Tho Pham, ville de HoChiMinh, Vietnam. Courriel: [email protected]
la source
L'assemblage System.Data.SQLite lié à la charge manuelle peut résoudre ce problème.
Code de gatapia modifié comme ci-dessous:
la source
J'ai eu cette erreur lorsque notre serveur Windows a été converti du système d'exploitation 32 bits en 64 bits. L'assembly qui lançait l'erreur était configuré pour se compiler en mode x86 (c'est-à-dire en mode 32). Je l'ai commuté sur "N'importe quel processeur" et cela a fait l'affaire. Vous pouvez modifier cette valeur en procédant comme suit:
clic droit sur le projet aller à
Properties -> Build -> Platform Target -> change to "Any CPU"
la source
J'ai résolu cela, assez curieusement, en installant System.Data.SQLite via l'application graphique Nuget, par opposition à la console du gestionnaire de packages.
L'installation via la console n'incluait pas les dépendances dont cette bibliothèque a besoin pour s'exécuter.
la source
System.Data.SQLite
a une dépendance surSystem.Data.SQLite.interop
assurez-vous que les deux packages sont de la même version et sont tous les deux x86 .C'est une vieille question, mais j'ai essayé tout ce qui précède. Je travaillais sur un projet strictement x86 , donc il n'y avait pas deux dossiers / x86, / x64. Mais pour une raison quelconque, il
System.Data.SQLite
s'agissait d'une version différente deSystem.Data.SQLite.interop
, une fois que j'ai retiré les dll correspondantes, le problème était résolu.la source
J'ai trouvé 2 solutions rapides. Soit travailler pour moi. Je pense que le problème vient des autorisations.
1) Au lieu d'utiliser le fichier Elmah.dll du répertoire net-2.0, j'ai utilisé Elmah.dll de net-1.1.
2) Au lieu de conserver Elmah.dll dans le répertoire bin du projet. Je crée un répertoire dll pour le mettre.
la source
Une autre façon de contourner ce problème consiste simplement à mettre à niveau votre application vers ELMAH 1.2 plutôt que 1.1.
la source
Pouvez-vous supprimer votre dossier de débogage bin et recompiler à nouveau?
Ou vérifiez la référence de votre projet au
System.Data.SQLite
, recherchez où il se trouve, puis ouvrez la DLL dans le réflecteur. Si vous ne pouvez pas l'ouvrir, cela signifie que la DLL est corrompue, vous voudrez peut-être en trouver une correcte ou réinstaller le framework .net.la source
Si vous utilisez IIS Express comme serveur Web sur votre machine de développement, je passerais à IIS local. Cela a fonctionné pour moi.
la source
Ceci est un ancien message, mais cela peut aider certaines personnes recherchant cette erreur à essayer de définir «Activer les applications 32 bits» sur Vrai pour le pool d'applications. C'est ce qui a résolu l'erreur pour moi. Je suis tombé sur cette solution en lisant certains des commentaires sur la réponse de @ beckelmw.
la source
Vous avez probablement installé le mauvais package. Vous voulez le package produit par Microsoft qui implémente le modèle de fournisseur System.Data.Common.
la source