Impossible de charger le fichier ou l’assembly ‘System.Data.SQLite’

J’ai installé ELMAH 1.1. Net 3.5 x64 dans mon projet ASP.NET et maintenant je reçois cette erreur (chaque fois que j’essaie 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 de chargement d’un programme avec un format incorrect a été effectuée.

Description: une exception non gérée s’est produite lors de l’exécution de la demande Web en cours. Consultez la trace de la stack 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 de chargement d’un programme avec un format incorrect a été effectuée.

Plus de détails d’erreur en bas.

Ma plate-forme Active Solution est “Any CPU” et j’exécute un x64 Windows 7 sur un processeur x64, bien sûr. 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é la même erreur sur notre serveur Windows x64.

J’ai essayé de comstackr pour x86 et x64 et j’ai 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, ce qui n’était pas nécessaire pour que le projet fonctionne sur le serveur et j’ai cette erreur de compilation:

Erreur 1 Avertissement en tant qu’erreur: génération de l’assembly – Ensemble référencé ‘System.Data.SQLite.dll’ cible un autre processeur MyProject

Des idées sur 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 demande Web en cours. Les informations concernant l’origine et l’emplacement de l’exception peuvent être identifiées à l’aide de la trace de stack d’exception ci-dessous.

Trace de la stack:

[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, CodeBase de chaîne, Evidence assemblySecurity, Emplacement de l’assemblyHint, StackCrawlMark et stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.nLoad (AssemblyName fileName, SsortingngBase, 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 (Ssortingng assemblySsortingng, Evidence assemblySecurity, StackCrawlMark et stackMark, Boolean forIntrospection) +142 System.Reflection.Assembly. Load (Ssortingng assemblySsortingng) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (Ssortingng assemblyName, Boolean 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 (Ssortingng assemblyName, Boolean 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.BuildProvidersComstackr..ctor (VirtualPath configPath, Boolean supportLocalization, Ssortingng outputAssemblyName) +54
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecomstackdApp) +232
System.Web.Compilation.BuildManager.ComstackGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesComstackd () +337

[HttpException (0x80004005): 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.Compilation.

[HttpException (0x80004005): 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.HttpRuntime.FirstRequestInit (contexte HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (contexte HttpContext) +85
System.Web.HttpRuntime.ProcessRequestInternal (HttpWorkerRequest wr) +259

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 System.Data.SQLite.dll particulier est x86 ou 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 capable d’utiliser la version x86 de System.Data.SQLite.dll.

Une alternative consiste à ne pas utiliser Cassini mais IIS7 qui est correctement x64.

Assurez-vous que l’option “Activer les applications 32 bits” est définie sur false pour le pool d’applications.

Accédez au IIS7 Application Pool -> advanced settings and set the 32-bit application to true .

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 faites référence à ELMAH. Reconstruisez et votre application ne tentera pas de charger cette DLL que vous n’utilisez pas.

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 un charme sur n’importe quelle architecture (enfin le 2 que j’ai testé)

J’espère que cela aide quelqu’un.

Guido

  private static void LoadSQLLiteAssembly() { Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase); FileInfo fi = new FileInfo(dir.AbsolutePath); ssortingng binFile = fi.Directory.FullName + "\\System.Data.SQLite.DLL"; if (!File.Exists(binFile)) File.Copy(GetAppropriateSQLLiteAssembly(), binFile, false); } private static ssortingng GetAppropriateSQLLiteAssembly() { ssortingng pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); ssortingng arch = ((Ssortingng.IsNullOrEmpty(pa) || Ssortingng.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64"); return GetLibsDir() + "\\NUnit\\System.Data.SQLite.x" + arch + ".DLL"; } 

En tant que personne ayant eu à gérer plusieurs rapports de bogues sur Roadkill Wiki avec exactement le même problème, voici ce que vous devez faire:

  • Utilisez-vous x64 ou x86? Sqlite est livré avec des DLL pour des architectures distinctes – copiez le bon dans votre dossier bin, il y a deux DLLS pour le fournisseur officiel: System.Data.SQLite.dll System.Data.SQLite.Linq.dll
  • Si vous ne parvenez pas à chercher ces assemblys, activez le mode 32 bits pour votre pool d’applications (une solution pour les machines de développement uniquement)
  • Si vous hébergez sur un serveur, vous aurez besoin du redissortingbuable Microsoft C ++ Runtime – il n’est pas installé sur Server 2008 R2 par défaut. version x64, version x86

Le nombre de sauts que vous devez franchir lors de la redissortingbution des fichiers binarys SQLite .NET est une véritable gêne, ma solution pour Roadkill étant finalement de copier les fichiers binarys 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 ++.

L’assembly System.Data.SQLite lié au chargement manuel peut résoudre ce problème.

Changement du code de Gatapia comme ci-dessous:

  public static void LoadSQLLiteAssembly() { Uri dir = new Uri(Assembly.GetExecutingAssembly().CodeBase); FileInfo fi = new FileInfo(dir.AbsolutePath); ssortingng appropriateFile = Path.Combine(fi.Directory.FullName, GetAppropriateSQLLiteAssembly()); Assembly.LoadFrom(appropriateFile); } private static ssortingng GetAppropriateSQLLiteAssembly() { ssortingng pa = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE"); ssortingng arch = ((Ssortingng.IsNullOrEmpty(pa) || Ssortingng.Compare(pa, 0, "x86", 0, 3, true) == 0) ? "32" : "64"); return "System.Data.SQLite.x" + arch + ".DLL"; } 

J’ai eu cette erreur lorsque notre serveur Windows a été converti de 32 bits à 64 bits. L’assembly qui émettait l’erreur était configuré pour comstackr en mode x86 (c.-à-d. Mode 32). Je suis passé à “Any CPU” et cela a fait l’affaire. Vous pouvez modifier cette valeur en procédant comme suit:

Faites un clic droit sur le projet allez dans Properties -> Build -> Platform Target -> change to "Any CPU"

Dans notre cas n’a pas fonctionné parce que notre serveur de production a manqué

Package redissortingbuable Microsoft Visual C ++ 2010 SP1 (x86)

Nous l’avons installé et tout fonctionne bien. Le pool d’applications doit avoir le paramètre Activer les applications 32 bits défini sur true et vous devez utiliser la version x86 de la bibliothèque.

J’ai résolu ce problème en installant System.Data.SQLite avec l’extension Nuget. Cette extension peut utiliser pour Visual Studio 2010 ou version ultérieure. Tout d’abord, vous devez installer l’extension Nuget. Vous pouvez suivre ici:

  • Accédez à Visual Studio 2010, Menu -> Outils
  • Sélectionnez Extension Manager
  • Entrez NuGet dans la zone de recherche et cliquez sur Galerie en ligne. En attente Récupérer des informations…
  • Sélectionnez le gestionnaire de packages NuGet récupéré, cliquez sur Télécharger. L’attendre Télécharger…
  • Cliquez sur Installer sur le gestionnaire de packages NuGet du programme d’installation de Visual Studio. Attendez que l’installation se termine.
  • Cliquez sur Fermer et ‘Redémarrer maintenant.

Deuxièmement, maintenant, vous pouvez installer SQLite:

  • Accédez au menu TOOLS-> Library Package Manager-> Package Manager Console du Visual Studio.
  • Exécutez ensuite la commande Install-Package System.Data.SQLite dans la console du gestionnaire de packages. Comme ceci: exécutez la commande Install-Package System.Data.SQLite dans la console du gestionnaire de packages

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 comme contenu et Copiez dans le répertoire de sortie est Copie toujours.

Donc, c’est ma façon.

Merci. Kim Tho Pham, ville de HoChiMinh, Vietnam. Email: tho.phamkim@gmail.com

J’ai curieusement résolu ce problème en installant System.Data.SQLite via l’application graphique Nuget, par opposition à la console du gestionnaire de paquets.

L’installation via la console n’incluait pas les dépendances que cette bibliothèque doit exécuter.

Je suis venu avec 2 solutions rapides. Soit travailler pour moi. Je pense que le problème est dû aux permissions.

1) Au lieu d’utiliser le fichier Elmah.dll du répertoire net-2.0, j’ai utilisé Elmah.dll à partir de net-1.1.

2) Au lieu de conserver Elmah.dll dans le répertoire bin du projet. Je fais un répertoire dll pour le mettre dans

Une autre façon de contourner ce problème consiste à mettre à niveau votre application vers ELMAH 1.2 plutôt que vers 1.1.

System.Data.SQLite a une dépendance sur System.Data.SQLite.interop assurez-vous que les deux packages ont la même version et sont tous deux x86 .

C’est une vieille question, mais j’ai essayé tout ce qui précède. Je travaillais sur un projet ssortingctement x86 , donc il n’y avait pas deux dossiers / x86, / x64. Mais pour une raison quelconque, le System.Data.SQLite était une version différente de System.Data.SQLite.interop , une fois que j’ai supprimé les DLL correspondantes, le problème a été résolu.

Pouvez-vous supprimer votre dossier bin debug et recomstackr à nouveau?

Ou vérifiez la référence de votre projet à System.Data.SQLite , suivez où il se trouve, puis ouvrez la DLL dans réflecteur. Si vous ne pouvez pas l’ouvrir, cela signifie que la DLL est corrompue, vous pouvez vouloir en trouver une correcte ou réinstaller le framework .net.

Si vous utilisez IIS Express en tant que serveur Web sur votre machine de développement, je passerais à IIS local. Cela a fonctionné pour moi.

Ceci est un ancien message, mais cela peut aider certaines personnes à rechercher sur cette erreur à essayer de définir “Activer les applications 32 bits” sur True 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 commentaires de la réponse de @beckelmw.

Vous avez probablement le mauvais paquet installé. Vous souhaitez que le package produit par Microsoft implémente le modèle de fournisseur System.Data.Common.