Question

Je suis en développement sous Windows 7 64 bits avec Visual Studio 2008.J'ai une collection de bibliothèques de classe que je les fusionner en un seul DLL à l'aide de ILMerge.Lorsque j'essaie d'utiliser cette fusionné DLL, cependant, je reçois

[BadImageFormatException:Impossible de charger le fichier ou l'assembly 'MyMergedDll' ou une de ses dépendances.Une tentative a été faite pour charger un programme avec un format incorrect.]

J'ai été chercher autour pour vous aider à cela et c'était comme si j'avais besoin de définir la propriété bâtie dans chaque projet dans MyMergedDll pour cible x86, donc je l'ai fait.J'ai également réglé tous les non-MSTest projets dans le web service dans lequel je suis référencement MyMergedDll pour cible x86.Je suis encore en train cette erreur, cependant.

Si cette entrée de blog est pour être cru, je peux obtenir cette erreur en faisant:

public class SpecificClass: BaseClass: where T : class { }

C'est, en ayant une contrainte de classe sur un générique.L'entrée de blog est à partir de 2007, cependant, de sorte que je ne sais pas si cela s'applique toujours.Je voulais une entrée de StackOverflow à ce que vous les gars pense que le problème est avant de m'en aller traquer chaque classe générique dans mes projets pour la vérification des contraintes.

Si c'est important, MyMergedDll est fort nom-signé.Je suis en train d'utiliser MyMergedDll à la fois une application de console et dans un service web.Je ne sais pas si les choses sont peut-être compliqué si IIS est mise à jour à chaque fois que j'reconstruire le service web.Avec l'application de console, je ne semble pour obtenir le BadImageFormatException quand je construis en mode Release.

Était-ce utile?

La solution

Je l'ai eu à travailler et je pense que c'était de faire deux choses:

  1. MyMergedDLL a été construit à l'aide d'un couple d'autres assemblées que je la contrôle, mais ces assemblées n'ont pas été mis à la cible x86.J'ai reconstruit à ces assemblées de ciblage x86, reconstruit les assemblées qui composent MyMergedDLL, et re-fusionné ces assemble pour former une nouvelle copie de MyMergedDLL.
  2. L'application de console qui utilise MyMergedDLL a été mis à la cible x86 en mode de Débogage, mais pas en mode Release, donc pourquoi il serait de travailler en mode Debug, mais donner le BadImageFormatException en mode Release.

La première chose n'aurait pas été nécessaire.Je pense que j'ai juste besoin de la consommation de MyMergedDLL également cible x86 en mode Release.Je n'ai jamais pu trouver la version de ILMerge je l'utilise, donc je viens de re-installé avec la dernière MSI que j'ai pu trouver sur le site de Microsoft.

Autres conseils

Avez-vous vérifié la version de ILMerge vous utilisez?

Je demande parce que un vieux, version incorrecte de aspnet_merge (ce qui se fait de la même fusion de dll, parmi d'autres choses) nous ont permis d'avoir les mêmes problèmes que vous décrivez.Je suis allé dans le détail au moment de répondre à cette question pour quelqu'un d'autre sur soi.

Il peut être utile d'avoir un rapide coup d'oeil à la dll dans ILDASM (Réflecteur a tendance à tomber quand vous essayez de décomposer ces mauvais dll - peut-être unsuprisingly) et voir si vous pouvez faire le point de la corruption et de ce que cela correspond à votre code, car il peut faire la lumière sur le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top