Visual Studio 如何加载库?

Posted

技术标签:

【中文标题】Visual Studio 如何加载库?【英文标题】:How does Visual Studio load libraries? 【发布时间】:2012-09-13 14:57:11 【问题描述】:

我有一个包含 C#、C++ 和 C++/CLI 项目的解决方案。更具体地说:它是 C++ 核心(约 5 个非托管 dll)、C++/CLI 核心包装器和具有项目特定业务逻辑的 C# 程序集。

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

此外,我在一个程序集中有 2 个表单,一个是从另一个继承的:VS 表单设计器可以正常加载父表单,但无法加载继承的表单。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

用Environment.SetEnvironmentVariable修改%PATH%变量 使用Kernel32.dll方法SetDllDirectory

SetDllDirectory-Snippet:

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

【讨论】:

以上是关于Visual Studio 如何加载库?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio 2010问题修复

visual studio 2008 c++ 中怎样添加动态链接库?

Visual Studio 链接器未加载库

如何在 Visual Studio 2019 中使用 CppFlow 库?

visual-studio-code 中的自动右括号不适用于 js 和 jsx 文件

visual studio 如何生成动态库