部署的64位c#应用程序可以';无法加载非托管dll
我在windows server 2008(IIS 7)和windows server 2012(IIS 8)上都部署了一个用c#编写的64位web应用程序部署的64位c#应用程序可以';无法加载非托管dll,c#,c++,.net,iis,C#,C++,.net,Iis,我在windows server 2008(IIS 7)和windows server 2012(IIS 8)上都部署了一个用c#编写的64位web应用程序 应用程序的一部分涉及从C代码中访问非托管C++ DLL。当我部署到IIS时,此调用失败。我得到了经典: 试图加载格式不正确的程序。(HRESULT的异常:0x8007000B) 我读过很多关于这个主题的文章,包括: 但我认为它们不适用于 我有一个64位的应用程序 它被编译为x64 它部署为x64 我已验证它在x64 IIS应用程序池下运
应用程序的一部分涉及从C代码中访问非托管C++ DLL。当我部署到IIS时,此调用失败。我得到了经典:
试图加载格式不正确的程序。(HRESULT的异常:0x8007000B) 我读过很多关于这个主题的文章,包括: 但我认为它们不适用于- 内核32.dll
- Advapi32.dll
- Crypt32.dll
- User32.dll
- 版本.dll
另外,我已经(仅针对kicks和skittles)将Enable32BitApplications设置为True,我得到了相同的错误,因为我的项目是一个64位的项目,并且引用了一个64位的非托管DLL,在32位进程中不能运行。< p>您需要在IIS中设置Enaby32位应用程序为true。 < P>对作为C++可重新分配DLL的非托管DLL有附加依赖性。机器上DLL的副本是32位的,一旦我把版本换成64位,它就可以正常加载了
吸取的教训是,DLL的所有依赖项都必须存在且位正确。您是否验证了服务器上的本机DLL实际上是x64?我验证了,我将部署到服务器上的DLL拖到了我的计算机上,并使用dumpbin.exe验证了它们是64位。检查本机DLL的依赖项。可能其中一个依赖项是32位二进制文件。您可以使用列出依赖项。@IInspectable请参阅上面的其他信息。您可以在32bitApplicationEnabled设置为true的情况下运行64位的应用程序。至少可以尝试一下。如果它成功运行,则有一个被引用的32位DLL,除非将此标志设置为true,否则应用程序将不会运行。因此出现错误…您无法将32位DLL加载到64位进程中。很抱歉,您是正确的。默认情况下,IIS将仅支持64位应用程序。现在需要显式启用32位应用程序。然而,我仍然会说,一个32位的DLL正在尝试加载:)结果证明你是正确的一半。试图加载32位DLL,但我需要关闭DLL,而不是启用32位应用程序。