我在Windows Server 2008(IIS 7)和Windows Server 2012(IIS 8)上部署了一个用64位Web应用程序部署到IIS。
部分应用程序涉及从c#代码访问非托管c ++ DLL。部署到IIS时,此调用失败。我得到了经典之作:
尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B)
我已阅读有关该主题的许多主题,包括:
An attempt was made to load a program with an incorrect format ERROR
但我不认为它们适用于
应用程序中有32位dll,但它们位于完全独立的项目中,这些项目没有引用或引用错误的项目。
有关其他信息,它在IIS Express中的本地计算机和通过IIS(Windows 7)部署的本地计算机上运行正常,因此在某处无法断开连接,我无法对其进行跟踪。
其他信息:
非托管DLL确实依赖于:
我意识到这些是32位我认为这些是32位,但是在64位机器上它们存在于System32中,所以我不确定......但如果是这样,我怎么能得到它编译为非托管DLL本身编译为64位。
另外,为什么它会在我本地工作?
另外,我(只是为了踢和吃喝玩乐)将Enable32BitApplications设置为True并且我得到相同的错误,因为我的项目是64位项目并且引用了64位非托管DLL,它无法在32位进程中运行
答案 0 :(得分:1)
作为c ++可再发行的dll的非托管DLL还有一个额外的依赖项。机器上的DLL副本是32位,一旦我将版本换成64位,它就装得很好。
经验教训,必须存在DLL的所有依赖项和正确的Bitness。
答案 1 :(得分:-2)
您需要在IIS中将Enable32bitApplications设置为true。