2012-09-13 45 views
3

我有C#,C++ & C++/CLI项目的解决方案。更具体地说:它是C++核心(〜5个非托管dll),C++/CLI核心包装器和具有项目特定的buisness逻辑的C#程序集。Visual Studio如何加载库?

前段时间我想出了VS 2008窗体设计器(WinForms)有时无法加载核心封装程序集。用VS调试器和Procmon花了几个小时后,我发现VS无法加载程序集,因为它无法解析包装程序依赖的非托管库。 VS在PATH环境变量的每个系统文件夹和文件夹中搜索,但不在包装程序集所在的文件夹中搜索。另外,我在一个程序集中有两个表单,一个是从另一个程序集继承的:VS表单设计器加载父表单很好,并且加载一个继承的表单失败。

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

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

回答

0

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

我不知道这个的确切原因,但我认为这是因为DLL不知道它从何处加载的路径(托管DLL's do!),只能查看当前目录和其他已知的路径。

但也有一种解决方法,您可以创建为Visual-Studio的启动可执行文件并执行下列操作之一:

SetDllDirectory会-段:

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