web-dev-qa-db-fra.com

Erreur de .net Framework (HRESULT 0x8007000B)

J'ai une application C # qui a été écrite sur une machine Windows 32 bits XP avec Visual Studio 2005. Elle fonctionne correctement sur les machines Windows XP. , Je reçois la boîte de dialogue suivante au démarrage:

enter image description here

Voici le texte intégral des détails. 

  See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
   at ICSNeoCSharp.IcsNeoDll.icsneoTxMessages(Int32 hObject, IcsSpyMessage& pMsg, Int32 lNetworkID, Int32 lNumMessages)
   at ICSNeoCSharp.FormDTCApplication.transmitFlowControl(Int32 myArbID) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 1750
   at ICSNeoCSharp.FormDTCApplication.flowControlTimer_Tick(Object sender, EventArgs e) in C:\Documents and Settings\Administrator\Desktop\Adam Stuff ThinkPad\DTC Checker FINAL\frmDTCApp.cs:line 5166
   at System.Windows.Forms.Timer.OnTick(EventArgs e)
   at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5472 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
----------------------------------------
DTC Checker V1.0
    Assembly Version: 1.0.4960.25549
    Win32 Version: 1.0.4960.25549
    CodeBase: file:///C:/DTC%20Checker%20V1.0%20R3/DTC%20Checker%20V1.0%20R3.exe
----------------------------------------
System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5468 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.5467 (Win7SP1GDR.050727-5400)
    CodeBase: file:///C:/Windows/Assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.Office.Interop.Excel
    Assembly Version: 12.0.0.0
    Win32 Version: 12.0.6600.1000
    CodeBase: file:///C:/Windows/Assembly/GAC/Microsoft.Office.Interop.Excel/12.0.0.0__71e9bce111e9429c/Microsoft.Office.Interop.Excel.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
    <system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.

Quelqu'un at-il rencontré cette erreur et a-t-il réussi à la résoudre?

16
Adam Jakiela

Bien que votre application principale puisse être construite pour AnyCPU, êtes-vous sûr que tous les assemblys sont AnyCPU? Avez-vous des assemblys natifs ou des assemblys contenant du code natif? Sont-ils construits contre x86?

fichier: /// C: /Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll

Cela me dit que l'application est exécutée en tant que processus x64, mais il semblerait qu'il existe un assemblage autre que AnyCPU ou x64 qui est probablement la cause de l'exception BadImageFormatException.

Vous pouvez essayer d’exécuter l’application à partir d’une invite 32 bits (c:\windows\SysWow64\cmd.exe) pour la forcer à être un processus 32 bits et à voir si cela fonctionne. Si cela fonctionne, il est certain que certains assemblages ne sont pas AnyCPU.

18
Wes Haggard

Propriétés du projet -> Construire -> Cible de la plate-forme -> x86 peut résoudre ce problème. 

4
Yuliia Ashomok

L’une des erreurs les plus courantes est que nous avons oublié de modifier le programme de test et le programme d’encapsidation sur la plate-forme appropriée. Voir l'image ci-dessous

 enter image description here

(dans la barre du haut, la plate-forme est au format x64 mais vous devez vous assurer qu'elle existe réellement dans la deuxième image ...)

 enter image description here

Assurez-vous que vous avez la bonne configuration sur le gestionnaire de configuration ... si votre configuration ne correspond pas à la configuration réelle de votre c ++ dll, elle donnera à BadImageFormatException.

J'ai appris de l'erreur après avoir beaucoup cherché ... et j'ai finalement eu ceci

3

Dans mon cas, j'avais l'erreur 0x8007000B car l'application fonctionnait en 32 bits sur mes 64 fenêtres 7. Je l'ai résolu en allant dans le dossier windows/syswov64 en modifiant la version 64 bits de MSVCR110.dll avec la version 32 bits de MSVCR110.dll. 

(N'oubliez pas de remettre la dll 64 après. Chaque fois que vous avez besoin de lancer votre application 32 bits, déplacez simplement la dll 32).

Vous pouvez trouver les versions de DLL ici (Décompressez-le avant de le coller dans le dossier syswov64).

2
JinSnow

D'après mon expérience, la cause de cette erreur est la version .Net Framework. 

Vérifiez votre version .Net Framework et sa mise à jour, ainsi que Vérifiez la version .Net de votre application.

1
Leonel Sarmiento

Mon problème a été résolu en compilant avec 32 bits, car Wix n’a actuellement pas de 64. Votre installateur sera en tout cas en 64 bits.

http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/64bit-bootstrapper-using-wix-td7582851.html

0
Ashish

Je voudrais aussi ajouter ma conclusion: j'ai décoché dans les propriétés du projet dans l'onglet Construire un "Préfère 32 bits" et j'ai cette erreur Après vérification, il était parti. J'ai n'importe quel processeur défini comme cible.

Je suis conscient que ce n’est pas une solution définitive, mais une solution aux symptômes, mais que cela pourrait être utile.

0
Rao

J'ai eu cette erreur lorsque ma solution a appelé une DLL 32 bits. En plus d'apporter les modifications de plate-forme mentionnées dans les réponses ci-dessus, dans VS2017 Project {yourproject} Properties Services, j'ai dû remplacer "Use Windows authentication" par "Use Forms authentication"

 Services tab is selected, and in the Authentication section "Use Forms authentication" is selected and circled in red

0
Peter Chambers

Le correctif pour moi était de changer le pool d'applications dans IIS. Ouvrez les propriétés du pool d’applications et allez dans Paramètres avancés ... Puis, réglez "Activer les applications 32 bits" sur Vrai. La valeur par défaut est False pour un nouveau. La partie de code a été réglée sur "Tous les processeurs", même si j’ai déjà résolu des problèmes en réglant le processeur sur x86.

0
smoore4

J'ai dû combiner des solutions de 2 à 3 réponses différentes pour résoudre la même erreur. La raison en est que la configuration finale avait des dll des plates-formes x86 et x64 (dans des dossiers séparés pour des exes distincts).

1) J'ai défini la cible de la plate-forme de mon application principale en tant que paramètres de configuration 64 bits et laissés tels quels, puis je les ai construits:  enter image description here

2) J'ai défini la plate-forme cible de mon projet de déploiement sur x64.

3) Les dll étant mélangées entre les dossiers, j’ai vérifié le chemin source de toutes les dll de l’éditeur de types de fichiers un par un et les ai remplacées en fonction de leur architecture.

4) Enfin construit le projet de déploiement avec les paramètres de configuration suivants:  enter image description here

La combinaison mentionnée ci-dessus est la seule qui a fonctionné.

0
Talha Imam