我正在为另一个基于公共.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框架重写它们。
答案 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文件夹中这解决了我的问题