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 2008 c++ 中怎样添加动态链接库?
如何在 Visual Studio 2019 中使用 CppFlow 库?