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

Eri*_*tas 42 .net revit badimageformatexception revit-api target-framework

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

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

然而,当我尝试运行我的应用程序时,我得到以下异常.

System.BadImageFormatException未处理消息:无法加载文件或程序集"RevitAPI,Version = 2011.0.0.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.尝试加载格式不正确的程序.

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

Sim*_*ier 52

它可能是32 - 64位不匹配.

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

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

  • 好的,我在SO上发现了另一篇帮助我的帖子.我在RevitAPI程序集上运行了CorFlags.32BIT标志设置为0,这意味着它被编译为"任何CPU"正确吗?PE标志也设置为PE32 +. (2认同)

小智 40

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


Lia*_*iam 31

对于使用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"
Run Code Online (Sandbox Code Playgroud)


bir*_*win 5

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