C# VisualStudio如何加载库? 我有一个C,C++和C++ +CLI项目的解决方案。更具体的说,它是C++核心(5非托管DLL)、C++ + CLI核心封装器和具有项目特定的Buasic逻辑的C(C)组件。p>

C# VisualStudio如何加载库? 我有一个C,C++和C++ +CLI项目的解决方案。更具体的说,它是C++核心(5非托管DLL)、C++ + CLI核心封装器和具有项目特定的Buasic逻辑的C(C)组件。p>,c#,c++,visual-studio-2008,c++-cli,C#,C++,Visual Studio 2008,C++ Cli,不久前,我发现VS2008表单设计器(WinForms)有时无法加载核心包装程序集。在使用VS debugger和Procmon几个小时后,我发现VS无法加载程序集,因为它无法解析包装依赖的非托管库。VS搜索每个系统文件夹和PATH环境变量中的文件夹,但不搜索包装程序集所在的文件夹 此外,我在一个程序集中有两个表单,一个是从另一个程序集中继承的:VS form designer很好地加载父表单,但加载继承的表单失败 所以,我的问题是:有人知道这种行为的原因吗 另外,我使用了变通方法:将包含项目二

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

此外,我在一个程序集中有两个表单,一个是从另一个程序集中继承的:VS form designer很好地加载父表单,但加载继承的表单失败

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


另外,我使用了变通方法:将包含项目二进制文件的文件夹添加到PATH变量中,但我仍然想知道原因。

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

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

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

  • 使用修改%PATH%变量
  • 使用Kernel32.dll方法
    SetDllDirectory
SetDllDirectory代码段:

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