Visual Studio如何加载库?

时间:2012-09-13 14:57:12

标签: c# c++ visual-studio-2008 c++-cli

我有一个C#,C ++& amp;的解决方案C ++ / CLI项目。更具体一点:它是C ++核心(~5个非托管dll),C ++ / CLI核心包装器和具有项目特定商务逻辑的C#程序集。

前段时间我发现VS 2008表单设计器(WinForms)有时无法加载核心包装器程序集。用VS调试器和Procmon花了几个小时后,我发现VS无法加载程序集,因为它无法解析包装器所依赖的非托管库。 VS从PATH环境变量中搜索每个系统文件夹和文件夹,但不在包装器程序集所在的文件夹中搜索。

此外,我在一个程序集中有两个表单,一个继承自另一个表单:VS表单设计器加载父表单并且加载继承表单失败。

所以,这是我的问题:有没有人知道这种行为的原因?

P.S。我使用了解决方法:将带有项目二进制文件的文件夹添加到PATH变量,但我仍然想知道原因。

1 个答案:

答案 0 :(得分:0)

您是否尝试将二进制文件放入可执行文件夹中?因为我确信.NET只搜索已知路径(路径存储在%PATH%中)和可执行文件的本地文件夹。

我不知道确切的原因,但我认为这是因为DLL不知道从哪里加载它的路径(托管DLL的做!)并且只查看当前目录和其他已知的路径。

但是有一个解决方法,你可以为Visual-Studio创建一个启动可执行文件并执行以下操作之一:

<强> SetDllDirectory会-段:

[DllImport("kernel32.dll", SetLastError = true)]
public static extern Boolean SetDllDirectory(String pathName);