BadImage Format Exception

A .NET 2.0 C# application refers to a 32-bit unmanaged dll. The application is built using C# on Visual Studio 2005 with the “AnyCpu” platform setting.

 

Result

The application runs fine on 32-bit machine but when it is launched on a 64-bit machine, it throws a BadImageFormatException.

“Unknown exception error hresult:0x8007000B,” which maps to BadImageFormatException.


Cause

In this case, the managed C# application is not a pure managed application because it refers to a 32-bit unmanaged or native dll.

The ‘AnyCpu’ switch has the following results:

– A 32-bit process on a 32 bit machine
– A 64-bit process on a 64 bit machine

A 32-bit dll cannot be loaded in a 64-bit process or vice-versa.  Hence, when an application running in a 64-bit process tries to load a 32 bit dll, it fails with BadImageFormatException.  Simillarly, when an application running in a 32-bit process tries to load a 64-bit dll, it fails with a BadImageFormatException.

 

Resolution

When a managed application refers to a native cpu or platform specific dll, it should not be build using the ‘AnyCpu’ switch.

 

DISCLAIMER

MICROSOFT AND/OR ITS SUPPLIERS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY, RELIABILITY OR ACCURACY OF THE INFORMATION CONTAINED IN THE DOCUMENTS AND RELATED GRAPHICS PUBLISHED ON THIS WEBSITE (THE “MATERIALS”) FOR ANY PURPOSE. THE MATERIALS MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS AND MAY BE REVISED AT ANY TIME WITHOUT NOTICE.

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND/OR ITS SUPPLIERS DISCLAIM AND EXCLUDE ALL REPRESENTATIONS, WARRANTIES, AND CONDITIONS WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO REPRESENTATIONS, WARRANTIES, OR CONDITIONS OF TITLE, NON INFRINGEMENT, SATISFACTORY CONDITION OR QUALITY, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THE MATERIALS.

 


APPLIES TO
Microsoft .NET Framework 1.0
Microsoft .NET Framework 1.0 Service Pack 3
Microsoft .NET Framework 1.1
Microsoft .NET Framework 1.1 Service Pack 1
Microsoft .NET Framework 2.0
Microsoft .NET Framework 2.0 IA64 Edition
Microsoft .NET Framework 2.0 Software Development Kit
Microsoft .NET Framework 2.0 x64 Edition
Microsoft .NET Framework 3.0
Microsoft .NET Framework 3.5

——————————————–

Microsoft Knowledge Base Article

This article contents is Microsoft Copyrighted material.
Microsoft Corporation. All rights reserved. Terms of Use | Trademarks


You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

AddThis Social Bookmark Button

Leave a Reply

*
To prove that you're not a bot, enter this code
Anti-Spam Image