我必须在我的应用程序中使用第三方DLL。 DLL是32位,我使用的系统是64位操作系统。
我已经在我的DotNet应用程序(framework-4.5)中导入了32位DLL,如下所示
[DllImport("Sample.dll",
EntryPoint = "Add",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
public static extern int Add(int iA, int iB);
在IIS 7.5中 - 我将“启用32位应用程序”设置为“True”。
还尝试将编译器管理器设置为 - X86,x64和任何CPU。
但是所有尝试都会导致与
相同的错误 An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
如何解决此问题......
答案 0 :(得分:2)
如果您尝试在IIS 7(和/或64位操作系统计算机)上运行32位应用程序,则会出现相同的错误。因此,从IIS 7中,右键单击应用程序的应用程序池并转到“高级设置”并将“启用32位应用程序”更改为“TRUE”。
重新启动您的网站,它应该可以运作。
答案 1 :(得分:0)
检查Configuration Manager中的构建复选框,查看可执行文件,运行的CPU,可能是那里有任何CPU构建。然后重新启动Visual Studio,不要抱怨它无法调试程序集。
右键单击项目并打开属性 - >编译 - >高级编译选项 - >目标CPU:它应与您正在构建的“平台”匹配。也就是说,如果您正在构建“任何CPU”,那么“目标CPU”应该说“任何CPU”。通过激活它们来检查所有平台并检查此设置。
如果您尝试在IIS 7(和/或64位操作系统计算机)上运行32位应用程序,则会出现相同的错误。因此,从IIS 7中,右键单击应用程序的应用程序池并转到“高级设置”并将“启用32位应用程序”更改为“TRUE”。
重新启动您的网站,它应该可以运作。
答案 2 :(得分:0)
当我在64位计算机上运行32位dll时以及使用DllImport方法并且忘记为我所调用的内容安装适当的可再发行库时,我遇到了这个问题。当有一个被调用的库依赖于它时,我需要安装visual c ++ redistributable,并且当从.NET库调用Fortran函数时,我还需要安装Intel Visual Fortran可再发行组件。