asp.net - Dll 未在 ASP.net Web Api 2.0 中加载
问题描述
我真的需要有人帮助。我有一个 ASP.Net Web Api 2.0 项目,我坚持将 Dll 加载到我的项目中。以下是详细信息:
加载Dll是用C++编写的,然后有一个.Net wrapper WrapperA,然后有另一个项目ProjectA,我们在其中调用.Net WrapperA,然后有Web Api调用ProjectA。
我收到的错误消息是:
托管调试助手“PInvokeStackImbalance”消息=托管调试助手“PInvokeStackImbalance”:“对 PInvoke 函数“CRM.Crypto!CryptOnAPI_Lib.CryptOnAPI::LoadLibrary”的调用使堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
LoadLibrary() 函数在 WrapperA 中定义为
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr LoadLibrary(string dllToLoad, IntPtr hFile, uint dwFlag);
在 web.config 文件中,我也提到了这个配置
<hostingEnvironment shadowCopyBinAssemblies="false"/>
我试图将所有 dll 放在 System32、inetsvr、IIS express 文件夹中,但没有任何效果。请注意,我有一个测试应用程序,它是一个用于测试 dll 的 Win Form 应用程序,并且 dll 在该应用程序中完美加载。
我已将所有 dll 放在 web API 项目的 bin 文件夹中。如果我从 bin 文件夹中删除 dll,我会收到与上述相同的错误消息。
请帮忙 :(
解决方案
找到了我的问题的解决方案。我仍然无法使用 win32 dll 进行调试,但是当部署到 IIS 服务器时,它工作正常。解决方案是将 Dll 放在以下文件夹之一中:
C:\Windows\System32\inetsrv C:\Windows\SysWOW64\inetsrv
win32 dll 将加载到 Asp.Net Api 中。
干杯
推荐阅读
- angular - D3 Angular - 错误 TS2349:无法调用类型缺少调用签名的表达式。类型
- android - 是否可以从 python raspberry pi/ubuntu 访问 SD 卡图像或目录
- arrays - 如何将数组的每个元素压缩到ruby中另一个数组的每个元素?
- java - 试图调用方法我得到 java.lang.IndexOutOfBoundsException
- google-photos - Google Photo API - 按名称获取文件
- javascript - 将图像变量传递给数据库
- c# - 使用 XmlUriResolver 为远程共享提供凭据
- javascript - React hook useEffect 永远/无限循环连续运行
- database - 您如何在数据库关系模式中处理递归关系 N:M
- vb.net - 防止重复 KeyDown 代码运行 (vb.net)