58

我正在为另一个基于公共 .NET API 的程序编写插件。通常,这些插件是通过创建引用 API 程序集的类库 DLL 来制作的。然后通过从 API 程序集中的基本命令类继承来创建命令类。然后应用程序被设置为引用插件 DLL 文件,然后还负责在用户请求时实际启动自定义命令类。

但是,现在我正在尝试通过 自动生成一些代码System.CodeDOM,并希望创建一个简单的控制台应用程序,该应用程序根据 API 程序集中的类型自动生成新的类类型。

然而,当我尝试运行我的应用程序时,出现以下异常。

System.BadImageFormatException 未处理消息:无法加载文件或程序集“RevitAPI,版本=2011.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。

通常我需要将插件程序集的目标框架设置为3.5。然而现在我发现如果我将控制台应用程序的目标框架设置为 2.0,上述错误就会消失。但是,我的控制台应用程序已经引用了我的其他目标框架设置为 3.5 的类库。而且我真的不想围绕 2.0 框架重写它们。

4

8 回答 8

68

这可能是 32 - 64 位不匹配。

如果您在 64 位操作系统上运行,则 Assembly RevitAPI 可能会编译为 32 位,而您的进程可能会编译为 64 位或“任何 CPU”。

或者,RevitAPI 编译为 64 位,您的进程编译为 32 位或“任何 CPU”并在 32 位操作系统上运行。

于 2010-12-02T21:59:32.097 回答
50

如果您使用 IIS,请转到应用程序池 选择您的站点使用的应用程序池,然后单击高级设置 确保将启用 32 位应用程序设置为 True

于 2013-11-20T11:40:14.087 回答
42

我在使用 x64 项目新安装 VS 时遇到问题 - 对于 Visual Studio 2013、Visual Studio 2015 和 Visual Studio 2017:

Tools
  -> Options
   -> Projects and Solutions
    -> Web Projects
     -> Check "Use the 64 bit version of IIS Express for web sites and projects"
于 2016-04-06T05:52:42.570 回答
7

这些建议是准确的,但我想补充一点。我被卡住了,因为我有多个发布配置。我正在编辑“调试 - 任何 CPU”,然后部署“调试 - x64”配置。确保您正在编辑和部署相同的配置。开始发布后单击“设置”选项卡验证这一点,并弹出“发布 Web”对话框。确保它与您编辑的配置相匹配。(那是我生命中的 4 个小时,我永远不会回来!)

于 2017-03-16T22:39:24.623 回答
3

要在 62 位或 32 位的任何 CPU 上运行它,请按照以下步骤操作:在解决方案资源管理器>属性>构建中右键单击项目名称,然后在配置:Active(Release)、平台:Active(Any CPU)和目标:x86。并在运行按钮旁边从选项中选择选项释放任何 CPU。然后保存并运行。

于 2020-12-22T11:23:52.903 回答
3

当我的软件在另一台机器上运行时,我遇到了同样的问题。在我的开发人员电脑(Windows 7)上,我安装了 Visual Studio 2015,目标电脑是全​​新安装的 Windows 10(安装了.Net)。我还在另一台干净的 Windows 7 电脑上测试了它,包括 .Net Framework。但是,在两台目标电脑上,我都需要为 x86 或 x64 安装Visual C++ Redistributable for Visual Studio 2015包(取决于构建应用程序的目的)。那已经安装在我的开发人员电脑上。

我的应用程序使用的是 C 库,该库已使用 Visual Studio 中的 /clr 和 /TP 选项编译为 C++ 应用程序。该应用程序还通过使用 dllexport 方法签名向 C# 提供功能。不确定 C# 集成是否会导致给我该错误,或​​者 C++ 应用程序是否会给我同样的错误。

希望它可以帮助任何人。

于 2017-01-06T22:54:45.133 回答
1

我有同样的问题我刚刚下载了 32 位 dll 并将其添加到我的 bin 文件夹中这解决了我的问题

于 2017-09-16T04:25:58.127 回答
1

在此处输入图像描述

我试图加载具有 x86 架构的 dll。在 c# 项目中,我将平台目标描述为 x86 并摆脱了错误

于 2021-09-10T04:23:27.460 回答