【问题标题】:An attempt was made to load a program with an incorrect format ERROR试图加载格式不正确的程序 ERROR
【发布时间】:2014-02-10 23:13:31
【问题描述】:

我正在尝试创建一个 Web 服务,其中功能由 64 位 DLL 执行。当我尝试构建此服务时,我收到错误“尝试加载格式不正确的程序”。 但是当我运行 32 位 DLL 时,它工作正常。

我正在尝试在 C# 中的 .net 4 框架上的 Visual Studio 2012 中运行

我已尝试更改 IIS 中的应用程序池设置并将构建平台目标更改为任何 cpu。无法确定问题出在哪里。请为您提供帮助。谢谢你

【问题讨论】:

标签: c# .net web-services


【解决方案1】:

尽量不要将 AnyCPU 编译与 32 位或 64 位 DLL 混合(DLL 可以编译为 32 位或 64 位或两者兼而有之) - 行为取决于平台,在某些环境中它可以工作,而在某些环境中则不行。

【讨论】:

  • 谢谢 GregS,但我已将其更改为 x64
  • 你改变了什么? VS中的目标平台?或 IIS 设置? - 几年前我遇到了同样的问题,正确的编译设置有帮助,还尝试在配置文件中指定目标框架 - “supportedRuntime”和“requiredRuntime”。你说 32bit dll 可以工作,但 64 不行——即使编译目标框架设置为 x64?
  • VS 中的目标平台并启用 32 位应用程序为 False。 32位改成x64后不运行
【解决方案2】:

右键单击您正在使用的应用程序池并转到Advanced Settings。在(General) 下有一个名为Enable 32-Bit Applications 的设置。如果您在 64 位操作系统上运行并将其设置为 true,则应用程序池将是 32 位进程,因此您的 64 位 DLL 将不会加载。将其设置为 false 以使您的应用程序池成为 64 位进程。

另外,检查您正在构建的 64 位 DLL 的依赖关系。它可能正在使用 32 位 dll/程序集。如果您的代码中有任何 [DllImport] 属性,请查看它们引用的 .dll 并确保它们与 64 位兼容。

【讨论】:

  • @user2055227 - 我添加了另一个建议。
  • 你能告诉我如何确保 dllimport 是 64 位的吗?
  • 我已经检查过它所指的 dllimport 是一个 64 位的 dll。
【解决方案3】:

如果您的 Web 服务引用 64 位 dll,则必须将其编译为 x64

【讨论】:

  • 我已尝试将平台更改为 x64,但仍然无法正常工作。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 2016-05-17
  • 2012-05-01
  • 2015-10-13
  • 1970-01-01
  • 2012-11-02
  • 2019-01-14
  • 1970-01-01
相关资源
最近更新 更多