J'obtiens une erreur «Une tentative de chargement d'un programme avec un format incorrect» a été effectuée sur un projet de réplication SQL Server

318

L'erreur exacte est la suivante

Impossible de charger le fichier ou l'assembly «Microsoft.SqlServer.Replication, Version = 9.0.242.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91» ou l'une de ses dépendances. Une tentative a été effectuée pour charger un programme avec un format incorrect.

J'ai récemment recommencé à travailler sur ce projet après un déménagement de deux mois vers un autre projet. Cela fonctionnait parfaitement avant, et j'ai revérifié toutes les références.

chauve
la source

Réponses:

405

La réponse ci-dessous est correcte, mais vous devrez peut-être également activer les applications 32 bits dans votre AppPool.

Source: http://www.alexjamesbrown.com/uncategorized/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load- un programme avec un format incorrect /

Lors de la configuration d'une application à exécuter sur ma machine locale (exécutant Vista 64 bits), j'ai rencontré cette erreur:

Impossible de charger le fichier ou l'assembly ChilkatDotNet2ou l'une de ses dépendances. Une tentative a été effectuée pour charger un programme avec un format incorrect.

De toute évidence, l'application utilise des composants ChilKat , mais il semblerait que la version que nous utilisons n'est que la version 32 bits.

Pour résoudre cette erreur, j'ai défini mon pool d'applications dans IIS pour autoriser les applications 32 bits. Ouvrez IIS Manager, cliquez avec le bouton droit sur le pool d'applications et sélectionnez Paramètres avancés (voir ci-dessous)

entrez la description de l'image ici

Réglez ensuite "Activer les applications 32 bits" sur True.

entrez la description de l'image ici

Terminé!

bboyle1234
la source
Cela entraînerait-il l'exécution de l'ensemble du pool d'applications en 32 bits et non en 64 bits? La recompilation de la dépendance pour les plates-formes 64 bits / toutes serait-elle une meilleure solution? J'ai ce problème à cause de NFOP, mais comme c'est open source, je pourrais le recompiler.
jamiebarrow
2
Le lien ne fonctionne pas, mais votre explication était suffisante pour résoudre mon problème. +1
Andrew Shepherd
Lien avec des instructions sur la façon d'activer les applications 32 bits: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
Brandon S
15
Il convient de noter que cette solution AppPool ne s'applique qu'aux applications ASP.NET - pourrait confondre certains développeurs qui n'ont jamais utilisé / configuré ASP.NET ou IIS.
galaktor
ne le corrige pas dans IIS7 uniquement dans IIS7.5
FlavorScape
120

J'ai trouvé la solution. J'ai récemment mis à niveau ma machine vers Windows 2008 Server 64 bits. L'espace de noms SqlServer.Replication a été écrit pour les plates-formes 32 bits. Tout ce que j'avais à faire pour le faire fonctionner à nouveau était de définir la plate-forme cible dans les propriétés de construction du projet sur X86.

chauve
la source
J'ai ce problème avec une DLL, mais mon projet> Propriétés HDP ... n'a pas d'onglet "Build" (apparemment tout sauf, mais pas ça). Les onglets Compiler et Déboguer ont une liste déroulante "Plate-forme", mais le seul élément dans la liste déroulante dans les deux cas est "Actif (N'importe quel CPU)".
B. Clay Shannon
Il m'est arrivé de rencontrer l'inverse du problème ci-dessus. J'avais tout fonctionnant en 64 bits et ma cible de build était Any CPU. Quand j'ai changé cela en 64 bits, cela a parfaitement fonctionné :)
Madhurya Gandi
87

Remplacez la valeur de Platform Target sur la page de propriétés de votre projet Web par Any CPU.

entrez la description de l'image ici

p.campbell
la source
N'a aucun effet, malheureusement.
Jonathan
4
J'avais tort - cela a fonctionné, après que je me suis débarrassé de tous mes dossiers «bin». Merci!
Jonathan
A également résolu mon problème, mais seulement après avoir fait cela pour CHAQUE projet dans ma solution. Les étapes mentionnées concernent les projets C #. Pour les projets VB.NET, changez Propriétés du projet> Compiler> Options de compilation avancées> CPU cible en "AnyCPU"
Francois Botha
6
Dans mon cas, le projet visait déjà "Any CPU". Mais j'utilise Windows 64 bits et j'essayais de DllImport un pilote matériel old-school. Changer spécifiquement la cible en x86 l'a corrigé pour moi.
bsegraves
Dans mon cas, je voulais exécuter sous x64. Ça ne marchait pas. Après avoir modifié toutes les recommandations, j'ai également dû changer le «témoin» sous le Web également en x64
SKCS Kamal
52

Accédez à IIS -> Pool d'applications -> Paramètres avancés -> Activer les applications 32 bits

Harpal
la source
Clay, quelle version d'IIS utilisez-vous?
Harpal
23

Nous avons récemment rencontré ce problème lors de la tentative d'exécution du code à partir de Visual Studio. Dans ce cas, vous devez faire
OUTILS> OPTIONS> Projets et solutions> PROJETS WEB et cocher la case "Utiliser la version 64 bits d'IIS Express pour les sites Web et les projets".

Justin
la source
1
C'est ce qui a finalement fonctionné pour moi. Surtout pour les gens qui essaient de déboguer l'API Web avec les bibliothèques Service Fabric !!! Si vous utilisez des DLL Service Fabric dans votre projet, assurez-vous que vous utilisez la solution ci-dessus.
Chris Dutra
C'est la SEULE solution qui a fonctionné pour moi. Merci. : D
Jeremy Styers
Travaillez aussi pour moi!
Cù Đức Hiếu
11

Pour ceux qui obtiennent cette erreur dans un projet ASP.NET MVC 3 , dans Visual Studio lui-même:

Dans une application ASP.NET MVC 3 sur laquelle je travaille, j'ai essayé d'ajouter une référence à Microsoft.SqlServer.BatchParser à un projet pour résoudre un problème où il manquait sur un serveur de déploiement. (Notre application utilise SMO; le correctif correct était d'installer SQL Server Native Client et quelques autres choses sur le serveur de déploiement.)

Même après avoir supprimé la référence à BatchParser, j'ai continué à obtenir l'erreur "Une tentative a été faite ...", référençant la DLL BatchParser, sur chaque page ASP.NET MVC 3 que j'ai ouverte, et cette erreur a été suivie par des dizaines d'analyses de page les erreurs.

Si cela vous arrive, effectuez une recherche de fichier et voyez si la DLL se trouve toujours dans l'un des dossiers \ bin de votre projet. Même si vous effectuez une reconstruction, Visual Studio n'efface pas nécessairement tout dans tous vos dossiers \ bin. Lorsque j'ai supprimé la DLL du bac et reconstruit, l'erreur a disparu.

Ryan Lundy
la source
Je viens de faire une reconstruction et le problème a disparu sans avoir à supprimer manuellement la DLL. Merci!
Trevor
4

J'ai eu cela dans une application MVC5 dans Windows 10 contre IIS Express. Ma solution était la suivante:

  • Outils =>
    • Options =>
      • Projets et solutions =>
        • Projets Web =>
          • Utilisez la version 64 bits d'IIS Express pour les sites Web et les projets
krillgar
la source
3

changer en 32 bits (vrai) ça marche

si vous obtenez cette longueur ne peut pas être inférieure à zéro. Nom du paramètre: problème de longueur dans la configuration du serveur iis changez simplement la chaîne de connexion dans le fichier web.config comme votre nom de serveur sql et votre nom de serveur et redémarrez iis puis essayez de charger la page qui fonctionne

munwar shaiik
la source
2

Si vous publiez dans Visual Studio 2012 en cas d'erreur, décochez l' option "Procompile lors de la publication" dans l'assistant de publication.

Décochez "Précompiler pendant la publication"

SushiGuy
la source
0

dans l'application de formulaire Windows, je fais cela, faites un clic droit sur Projet-> Propriétés-> Build-> Case à cocher Préférer 32 bits. Merci a tous

Amirhossein Yari
la source
0
  1. Supprimez le répertoire de test temporaire situé ici C: \ Users (User) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Définissez tous les projets sur x64 dans Visual Studio

  3. Définissez l'architecture de processeur par défaut sur x64 (Test / TestSettings / Default Processor Architecture).

Assurez-vous de nettoyer le fichier de solution. J'espère que cela vous aidera!

Madhurya Gandi
la source
0

Changer le Framework cible dans les propriétés du projet de .NET Framework 4.7.1 à 4.6.2 a fonctionné pour moi.

sussexrick
la source