DLLImport找不到dll

时间:2011-02-10 13:19:13

标签: c# asp.net c++ iis

我在我的asp.net C#代码中使用DLLImport[absolute path of the C++ dll]来调用C ++ dll中的方法。这很有效。

然后我在IIS上发布了该网站,并说它无法加载dll。

您能否建议如何解决此问题?

2 个答案:

答案 0 :(得分:2)

我使用Native LoadLibrary从特定位置加载DLL。以下网址谈到了如何做到这一点。

我假设你有正确的权限集可以使用非托管代码,你可以使用以下内容:

private static bool CanCallUnmanagedCode
{
 get
  {
  try
  {
    new SecurityPermission(SecurityPermissionFlag.Unmanage dCode).Demand();
  }
  catch(SecurityException)
  {
    return false;
  }
  return true;
 }
}

void Page_Load(Object sender, EventArgs e)
{
  if (CanCallUnmanagedCode)
    Label1.Text = "This page can call unmanaged code.";
else
    Label1.Text = "This page can NOT call unmanaged code.";
}

Label1为:

<asp:Label id="Label1" Text="Label Control" runat="server"/>

接下来要检查你的asp.net环境的位数以确保它与你匹配.dll ...因为x86 DLL无法通过x64环境加载。

How to call C++ DLL from ASP.NET (C#) code?

http://msdn.microsoft.com/en-us/library/ms684175

答案 1 :(得分:1)

猜测会非常困难。最可能的原因是:

  • 位置不存在
  • 应用程序池标识无权访问该文件夹,因此无法找到该路径。
  • 服务器上正在进行一些虚拟化虚拟化。
  • 需要定义
  • AllowPartiallyTrustedCallers 属性,因为服务器可能具有更严格的P / Invoke安全性。

首先,我会看一下 Windows事件日志 - &gt;安全与应用。

如果我可以在该服务器上运行某些工具,我将运行sysinternal的ProcMon.exe以查看它在尝试解析DLL路径时要查看的路径。