36
votes

I am getting the following error message when compiling or attempting to run my application on Windows 7 64 bit. I've scoured the Internet and many people have the same error message. However, none of the solutions address my problem or situation. I am using Visual Studio 2010.

Error message

Error 38 Could not load file or assembly 'file:///D:/Projects/Windows Projects/Weld/Components/FileAttachments/FileAttachments/FileAttachments/bin/x86/Debug/FileAttaching.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format. Line 1212, position 5. D:\Projects\Windows Projects\Weld\Weld\Weld.UI\frmMain.resx 1212 5 Weld.UI

Description

OK, so I have two projects, a UI project and a FileAttachment project. The UI project has a reference to the FileAttachment project. When I compile the UI project in "Any CPU" mode, everything works fine, and it runs. I assume 'Any CPU' will run in 64-bit mode when I compile as that is the platform I am using.

I want to run/compile as x86, so I try to do that. I change the configuration for all projects to x86 and verify that these configurations are compiling to x86. I compile and get the error as stated above.

I find it odd that it compiles and works fine in 64-bit but not 32-bit. However, when compiled and deployed to users as 'Any CPU', if these users have x86 it still works for them without any problems. I just can't compile or run as x86 on my PC. Again, I can compile as Any CPU and deploy to a 32-bit PC without any problems.

Neither projects are referencing any 64-bit-only DLL files. Both projects are verified to be targeting 32-bit DLL files and .NET Framework assemblies.

I need to compile and run this locally under 32-bit mode. I need JIT edit/continue, among other things.

Here is the line of code in the resx file that is causing the problem:

 <data name="ImageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
....{mime data}....
 </data>

The resx file is verified to be generated for .NET 2.0 and is only referencing .NET 2.0 assemblies and not .NET 4.0 versions.

How can I fix this problem? I've searched the Internet and have found hundreds of people with the same error message, but a different problem.

4
It's been over 2 years now. Is there a better way to handle this problem now? A VS 2010 update or something? We just barely upgraded to VS 2010 and are running into this same problem.goku_da_master

4 Answers

33
votes

This appears to be a VS 2010 bug with image lists. See https://connect.microsoft.com/VisualStudio/feedback/details/532584/error-when-compiling-resx-file-seems-related-to-beta2-bug-5252020?wa=wsignin1.0

I was able to utilize the workaround listed to get it to work for me.


Posted by Luis Mack on 5/12/2010 at 8:50 AM I've found the same problem, only for a specific project when compiling on a 64-bit machine. A fix that SEEMS to work is to manually alter one character in the image stream EVERY TIME the usercontrol or form is edited in the designer

          AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w

Change to      AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w

That is 00LjAuMC4w back to 0yLjAuMC4w at the end of the line (00 back to 0y)


Jim

7
votes

My simplest solution has been to just go into the error'ed line and change the base64 to base32

<data name="myGUIcontrol.myObj" mimetype="application/x-microsoft.net.object.binary.base32">
... block of binary here

But I would like to find a way to keep it from happening every time I make a change in designer. Maybe an attribute for the class that forces VS10 to make it a base32 ??

1
votes

I have run into the same problem with one of my programs. The issue is that for some reason the Visual Studio appears to be generating 64 bit data blocks for some of the GUI control properties, which it is then unable to load when compiling to x86.

In my case, I am able to work around the problem by deleting the problamatic data blocks from the resx file along with the line code lines in the cs.designer file that reference those blocks. I am able to do this as the corresponding source code lines that are assigning the referenced property are redundant and not needed. The only annoying thing is that I have to redo those fixes each time I modify anything in the designer, as Visual Studio then adds back in the bad code.

1
votes

We have faced the same issue last week, and we found a good workaround.

You have to open the .resx file in the Designer and set the accessmodifier from public to no code generation.