System.BadImageFormatException:无法加载文件或程序集

时间:2012-09-05 15:59:20

标签: windows

我使用Visual Studio 2010开发了一个Windows服务应用程序,以便集成两个应用程序。

在我的WinService中,我调用目标应用程序开发人员提供的一些API DLL文件,以便在从源应用程序获取该信息后在目标应用程序中创建一些信息。

所以我的Windows服务就像一些中间件应用程序一样。

当我运行该服务时,我收到以下错误:

System.BadImageFormatException: Could not load file or assembly 'Interop.ErpBS800, Version=8.5.0.0, Culture=neutral, PublicKeyToken=e076e239d0e78a42' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'Interop.ErpBS800, Version=8.5.0.0, Culture=neutral, PublicKeyToken=e076e239d0e78a42'
   at MaeilKitWintouch.Primavera.CreateDocument(Facturas fac)
   at MaeilKitWintouch.MaeilKitWintouch.ExecuteRequest()


WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

在我的Windows 7 x86笔记本电脑中,一切都运行良好,但在Windows Small Business Server 2011 Essentials 64位中,我收到了该错误。

我有PLATFORM TARGET =任何CPU和TARGET FRAMEWORK = .NET 4.

2 个答案:

答案 0 :(得分:4)

您的应用程序可能正在以64位模式运行(这是允许的,因为您将平台目标设置为任何CPU )并尝试加载32位库。

博客帖子 Compiling .NET for a Specific Target Platform (Any CPU vs x86 vs x64) 对此进行了总结。

答案 1 :(得分:0)

我对这个错误的解决方案有点不同,经过4天的平台战争后,如果我改为x86 / x64,我会遇到同样的错误....

我做的是:

  1. 从visual studio中卸载所有项目以及对冲突DLL的引用(同时使用引用注释所有代码行),项目必须正常运行。
  2. 在主应用中,转到属性 - >编译 - >预先编译选项 - > Tarjet CPU - 此处更改为x86
  3. 重新编译项目
  4. 将项目/引用加载到DLL
  5. 测试是否正常
  6. 取消注释所有代码行并重新编译