Could not load file or assembly exception

30

Any thoughts on what might be causing this exception?

I have a webservice proj, when i load the link i get

Could not load file or assembly 'Interop.DIB' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Exception Details: System.BadImageFormatException: Could not load file or assembly 'Interop.DIB' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Inner exceptions:

[BadImageFormatException: Could not load file or assembly 'Interop.DIB' or one of its dependencies. An attempt was made to load a program with an incorrect format.]

[ConfigurationErrorsException: Could not load file or assembly 'Interop.DIB' or one of its dependencies. An attempt was made to load a program with an incorrect format.]

[HttpException (0x80004005): Could not load file or assembly 'Interop.DIB' or one of its dependencies. An attempt was made to load a program with an incorrect format.]

Version Information:
Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272

c#
web-services
asked on Stack Overflow Feb 23, 2012 by Sharpeye500 • edited Feb 23, 2012 by (unknown user)

13 Answers

83

Ok the answer is Got to Start->Run->type inetmgr and on the left application pools, select DefaultAppPool and the virtual directory name of the app and for both make sure to enable 32 -bit applications to true, am using IIS7.0 and windows 7 64-bit. enter image description here

answered on Stack Overflow Feb 23, 2012 by Sharpeye500 • edited Feb 6, 2014 by Lucky
28

BadImageFormatException usually means 64 vs 32 bit conflict. One of the assemblies is set to a specific platform i.e. 64 bit or 32 bit while the other is set or defaults to a different one. Check if both assemblies are for the same platform, preferably "Any CPU". In other words it could be that a 64 bit assembly is trying to load 32 bit one or vice versa.

This also applies if you're calling a COM or a DLL which is compiled for different platform, for example you call 32 bit COM/DLL from an assembly on a 64 bit system where assembly's platform would default to x64. In this case adjust your assembly's platform to match.

To change platform go to project Properties -> Build -> Platform.

answered on Stack Overflow Feb 23, 2012 by Maciej • edited Feb 23, 2012 by Maciej
10

I had this issue, when trying to use 64-bit .dlls in my ASP.Net project, in Visual Studio 2013.

The solution was to click on Tools\Options, and tick this box:

enter image description here

answered on Stack Overflow Mar 17, 2016 by Mike Gledhill
3

The most common cause in my experience is that you made a change to a referenced assembly that requires rebuilding other assemblies using that changed assembly, and didn't rebuild them.

Example #1: you have an EXE that references a DLL. You add something to the referenced DLL that adds a new method, new parameter, whatever. This changes the external "signature" of the DLL; that is, the location in memory of various entry points. You don't rebuild the EXE. When the EXE loads and tries to reference the new DLL, its old entry point is no longer valid, so it cannot execute the code it needs.

Example #2: you have an x86 EXE that references a DLL. This DLL must also be compiled for x86 (or Any CPU). If you rebuild it for x64, the EXE, running in a 32-bit space, will not understand the instructions and register references to the 64-bit "extended" world, and will cry uncle.

answered on Stack Overflow Feb 23, 2012 by KeithS
2

I had the same issue on Visual Studio 2015 on Windows 10 x64. I was already compiling in Any CPU mode. This was a default MVC4 application (nothing added). I found a simple solution over here that worked for me: https://github.com/aspnet/Home/issues/524

In VS 2015: Tools > Options > Projects and Solutions > Web Projects > Use the 64 bit version of IIS Express for websites and projects

answered on Stack Overflow Aug 30, 2015 by Andrew Swallows
1

If I had to take a guess, it is either a) not finding the interoped assembly or b) the COM DLL is not registered in the local registry. Simply copying DIB to the /bin folder is not enough when you are monkeying with COM.

I believe (B) is the most likely answer to what is happening.

answered on Stack Overflow Feb 23, 2012 by Gregory A Beamer
0

What worked for me was to add the assembly to GAC. To do that I ran gacutil -i PATH_TO_ASSEMBLY from Visual Studio Command Prompt

answered on Stack Overflow May 29, 2013 by Dublin7
0

I finally got around this exception by deleting the entry in the applicationhost.config for IIS Express (C:\Users{username}\Documents\IISExpress\config\applicationhost.config).

I had also stopped the IIS express instance, cleaned and rebuilt in VS. Then change the config file, then restarted VS 2013.

answered on Stack Overflow Nov 20, 2013 by AlignedDev
0

An alternate to this issue is to change the build properties of your project.

For vb.net got to Project--> Properties --> Compile --> Advanced Compile Options Here change the target CPU

answered on Stack Overflow Jul 9, 2014 by user3821479
0

What worked for me is doing a BIOS update on my machine!

answered on Stack Overflow Jan 31, 2017 by radkan
0

This work for me, if not work for you, don't vote down. It's impolite

So it works if I change in the c# project from Any CPU to x86(all dlls are compiled in WIN32) from Properties -> Build -> Platform Target. I work on a 64-bit Win7 pc and aparently if I use Any CPU as target it does't find the wrapper dll.

https://www.codeproject.com/Questions/358717/Could-not-load-file-or-assembly-dll-file
answered on Stack Overflow Apr 18, 2018 by Trương Long • edited Apr 18, 2018 by Trương Long
0

My Error fixed, with change of build option to:

in my C#.net win project:

Properties > Build > Platform Target > 'x86'

I accidentally change its value to 'Any CPU' and forget to change it.

answered on Stack Overflow Apr 24, 2018 by Zolfaghari
0

My Error fixed, with change of build option to:

in my C#.net win project:

Properties > Build > Platform Target > 'x86'

I accidentally change its value to 'Any CPU' and forget to change it.

It's work for me

answered on Stack Overflow Nov 5, 2019 by H.Ken • edited Nov 5, 2019 by Vineesh TP

User contributions licensed under CC BY-SA 3.0