Ошибка .NET Framework (HRESULT 0x8007000B)

У меня есть приложение C #, которое было написано на 32-битной машине Windows XP с Visual Studio 2005. Приложение отлично работает на машинах с Windows XP, однако, когда я пытаюсь запустить его на 64-битной профессиональной машине Windows 7, я получаю следующее диалоговое окно на старте:

введите описание изображения здесь

Вот полный текст из деталей.

  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.

Кто-нибудь еще сталкивался с этой ошибкой и смог ее решить?


person Adam Jakiela    schedule 02.08.2013    source источник
comment
вы используете exe или решение в x64?   -  person Arshad    schedule 02.08.2013
comment
EXE. У меня нет визуальной студии на машине с Windows 7.   -  person Adam Jakiela    schedule 02.08.2013
comment
Вы создали свой exe для компьютеров x64   -  person Arshad    schedule 02.08.2013
comment
Я строю для любого процессора   -  person Adam Jakiela    schedule 02.08.2013
comment
Я пробовал строить специально для 64, но это не сработало.   -  person Adam Jakiela    schedule 02.08.2013
comment
снова скомпилируйте свой код: Project Properties - ›Compile -› Advanced Compile Options button = ›Затем вы можете выбрать Целевой ЦП в поле со списком.   -  person Arshad    schedule 02.08.2013


Ответы (10)


Хотя ваше основное приложение может быть создано для AnyCPU, вы уверены, что все сборки - AnyCPU? У вас есть собственные сборки или сборки, содержащие собственный код? Они построены против x86?

файл: /// C: /Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll

Это говорит мне, что приложение работает как процесс x64, но может показаться, что есть некоторая сборка, которая не является AnyCPU или x64, что, вероятно, является причиной исключения BadImageFormatException.

Вы можете попробовать запустить приложение из 32-разрядной командной строки (c: \ windows \ SysWow64 \ cmd.exe), чтобы заставить его быть 32-разрядным процессом, и посмотреть, работает ли это. Если это сработает, то определенно есть какая-то сборка, которая не является AnyCPU.

person Wes Haggard    schedule 02.08.2013
comment
Я попытался запустить его в командной строке, но это не сработало. Я думаю, вы столкнулись с тем, что сборка не работает в 64-битной версии. Есть ли способ запустить 32-битный файл сборки в 64-битном? - person Adam Jakiela; 02.08.2013

Свойства проекта -> Сборка -> Цель платформы -> x86 может решить эту проблему.

person Yuliia Ashomok    schedule 06.11.2014

Одна из наиболее частых ошибок - мы забыли изменить тестовую программу и программу-оболочку на правильную платформу. См. Изображение ниже

введите описание изображения здесь

(в верхней панели отображается платформа x64, но вам нужно убедиться, что она действительно существует на втором изображении ...)

введите описание изображения здесь

Убедитесь, что у вас есть правильная конфигурация в Configuration Manager ... если ваша конфигурация не соответствует фактической конфигурации вашей dll c ++, она выдаст исключение BadImageFormatException.

Я извлек урок из ошибки после долгих поисков ... и наконец получил это

person MD. Nazmul Kibria    schedule 03.10.2017

В моем случае у меня была ошибка 0x8007000B, потому что приложение работало в 32-битном режиме на моих 64-битных окнах 7. Я решил это, перейдя в папку windows / syswov64, изменив 64-битную версию MSVCR110.dll на 32-битную версию MSVCR110.dll.

(Только не забудьте после этого вернуть 64 DLL. Каждый раз, когда вам нужно запустить 32-битное приложение, просто переместите на него 32-битную DLL).

Версии dll можно найти здесь (разархивируйте перед вставкой в ​​папку syswov64 ).

person JinSnow    schedule 01.04.2016

По моему опыту, причиной этой ошибки является версия .Net Framework.

Проверьте версию и обновление .Net Framework, а также проверьте версию .Net вашего приложения.

person Leonel Sarmiento    schedule 02.08.2013

Для меня исправление заключалось в изменении пула приложений в IIS. Откройте свойства пула приложений и перейдите в «Дополнительные настройки» ... Затем измените «Включить 32-разрядные приложения» на «Истина». По умолчанию для нового используется значение False. Часть кода была установлена ​​на «Любой ЦП», хотя в прошлом я исправлял проблемы, устанавливая ЦП на x86.

person smoore4    schedule 13.06.2017

Моя проблема была решена путем компиляции с 32-разрядной версией, так как Wix в настоящее время не имеет 64-разрядной версии. Ваш установщик msi в любом случае будет 64-разрядным.

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

person Ashish    schedule 08.03.2016

Я хотел бы добавить также свой вывод: в свойствах проекта на вкладке «Сборка» я снял флажок «Предпочитать 32-разрядный» и получил эту ошибку. После повторной проверки его не было. У меня в качестве цели установлен Any CPU.

Я понимаю, что это не окончательное решение, это просто устранение симптомов, но это может помочь.

person Rao    schedule 03.03.2017

У меня была эта ошибка, когда мое решение вызывало 32-битную dll. Помимо внесения изменений в платформу, упомянутых в других ответах выше, в VS2017 Project {yourproject} Properties Services мне пришлось изменить «Использовать проверку подлинности Windows» на «Использовать проверку подлинности с помощью форм».

Выбрана вкладка

person Peter Chambers    schedule 11.06.2018

Мне пришлось комбинировать решения из 2-3 разных ответов, чтобы устранить одну и ту же ошибку. Причина в том, что в окончательной настройке были dll с платформ x86 и x64 (в отдельных папках для разных exes).

1) Я установил целевую платформу своего основного приложения как 64-битную, оставил настройки конфигурации как есть и построил его:  введите описание изображения здесь

2) Я установил целевую платформу моего проекта развертывания как x64.

3) DLL-библиотеки смешивались между папками, поэтому я проверил исходный путь всех dll в редакторе типов файлов одну за другой и заменил их в соответствии с их архитектурой.

4) Наконец, построил проект развертывания со следующими параметрами конфигурации:  введите описание изображения здесь

Вышеупомянутая комбинация - единственная, которая сработала.

person Talha Imam    schedule 04.10.2018