2

我使用 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 位中,我收到了该错误。

我有平台目标 = 任何 CPU 和目标框架 = .NET 4。

4

2 回答 2

4

您的应用程序可能在 64 位模式下运行(这是允许的,因为您将 Platform Target 设置为Any CPU)并尝试加载 32 位库。

博客文章Compiling .NET for a specific Target Platform (Any CPU vs x86 vs x64)很好地总结了这一点。

于 2012-09-05T16:07:16.467 回答
0

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

我所做的是:

  1. 从 Visual Studio 中卸载所有项目和对冲突 DLL 的引用(还用引用注释所有代码行),项目必须运行没有错误。
  2. 在主应用程序中,转到属性 -> 编译 -> 高级编译选项 -> Tarjet CPU - 并在此处更改为 x86
  3. 重新编译项目
  4. 将项目/引用加载到 DLL
  5. 测试是否工作正常
  6. 取消注释所有代码行并重新编译
于 2015-01-20T20:40:57.410 回答