Question

J'ai un service Web qui lance une BadimageFormatexception à chaque fois que j'essaie d'exécuter le service à partir de Visual Studio. Cette réponse à une autre question a suggéré de gérer la pétérification contre les DLL pour voir s'il y a des problèmes. Bien que la DLL de mon service Web soit bien, le service Web dépend d'un assemblage ilmergé, qui a des erreurs:

Il]: Erreur: [C: Blah MyilmergedAssembly.dll: Encryption

Utils.SeCureStRingExtensions :: Secureequals] [Offset 0x00000055] [Pointeur non géré] [Pointeur non géré attendu] Type inattendu sur la pile.

Il]: Erreur: [C: Blah MyilmergedAssembly.dll: Encryption

Utils.SeCureStringExtensions :: SecureEquals] [Offset 0x0000005d] [Pointeur non géré] [Pointeur non géré attendu] Type inattendu sur la pile.

Il]: Erreur: [C: Blah MyilmergedAssembly.dll: Encryption

Utils.securestRingExtensions :: Secureequals] [Offset 0x0000007e] Les pointeurs non gérés ne sont pas un type vérifiable.

3 Erreur (s) Vérification. MyilmergedAssembly.dll

(188 avertissements)

Je pense que cela découle de mon utilisation de Marshal et IntPtr Dans MyilmergedAssembly, mais partout où je fais cela, j'ai la méthode déclarée comme unsafe. Comment puis-je me débarrasser des erreurs que PEVERIFY donne, et j'espère que je me débarrasser de la BadimageFormatexception qui apparaît lorsque j'essaie d'exécuter mon service Web?

Éditer: Il semble que je ne peux peut-être pas utiliser ilmerge pour fusionner des assemblages qui ont un code dangereux. J'ai donc essayé de faire référence à mon service Web toutes les DLL individuelles dans MyilMergedAssembly, mais j'obtiens toujours une conception de BadimageFormatexception. Maintenant, cela me donne l'exception sur l'une des assemblées individuelles. Lorsque j'exécute Peverify sur cet assemblage individuel, j'obtiens:

Il]: erreur: [c: blah connection.dll: connexion

.ConnectionBase ::. CTOR] [HRESULT 0x80070002] - Le système ne peut pas trouver le fichier spécifié.

La ConnectionBase La classe à laquelle il fait référence est là dans Connection.dll, ou du moins il devrait être car la classe est définie dans l'espace de noms / projet de connexion. La connexion a «permettre le code dangereux» vérifié dans ses options de construction. Le constructeur dans ConnectionBase auquel il pourrait se référer est marqué comme internal.

Éditer: J'ai essayé de vérifier «Autoriser le code dangereux» dans le projet de service Web qui utilise les DLL avec du code dangereux. J'ai aussi essayé d'ajouter compilerOptions="/unsafe" dans le fichier web.config pour le service Web dans le System.Codedom> Compiler> Node de compilateur. Je reçois toujours une page avec ce qui suit lorsque j'exécute le service Web, cependant:

Impossible de charger le fichier ou l'assemblage de «connexion» ou l'une de ses dépendances. Une tentative a été faite pour charger un programme avec un format incorrect.

Pas de solution correcte

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