System.BadImageFormatException尝试加载格式不正确的程序

时间:2010-12-02 21:54:02

标签: .net badimageformatexception revit target-framework revit-api

我正在为另一个基于公共.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框架重写它们。

7 个答案:

答案 0 :(得分:49)

可能是32 - 64位不匹配。

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

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

答案 1 :(得分:39)

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

答案 2 :(得分:22)

我遇到了使用x64项目安装VS的新问题 - 适用于Visual Studio 2013和Visual Studio 2015:

Tools
  -> Options
   -> Projects and Solutions
    -> Web Projects
     -> Check "Use the 64 bit version of IIS Express for web sites and projects"

答案 3 :(得分:3)

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

答案 4 :(得分:3)

要在任何 62 位或 32 位 CPU 上运行它,请执行以下步骤: 在“解决方案资源管理器”>“属性”>“构建”中右键单击项目名称 并在 Configuration:Active(Release)、Platform:Active(Any CPU) 和 Target:x86 下设置这些。 并在运行按钮旁边从选项中选择选项释放任何CPU。 然后保存并运行。

答案 5 :(得分:0)

当我的软件在另一台机器上运行时,我遇到了同样的问题。在我的开发者电脑(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 ++应用程序是否会给我相同的信息。

希望它可以帮助任何人。

答案 6 :(得分:0)

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