【问题标题】:.NET assembly DLL missing dependencies.NET 程序集 DLL 缺少依赖项
【发布时间】:2012-03-05 23:16:51
【问题描述】:

我正在为 C++ 类制作 C++/CLI 包装器,但通过构建我的 C++/CLI 项目创建的 DLL 无法在 C# 中加载,Assembly.Load 引发 fileNotFound 异常,并显示消息“无法加载文件或程序集 'CLIExport.dll' 或其依赖项之一。系统找不到指定的文件。"

C++/CLI项目仅包含包装类、C++类和C++类依赖的一个头文件,解决方案中已添加源文件和头文件,未添加任何引用。是否需要在 C++/CLI 项目中添加对 C++ 类的引用?我不知道 C# 应用程序认为程序集缺少什么,也不知道我需要添加什么引用,C++/CLI 项目是否需要引用它使用的每个 .net 类型,如类系统命名空间?

谢谢。

【问题讨论】:

  • 您是否尝试将 x86 库加载到 64 位项目中?
  • 我不相信,我在 64 位 PC 上与我正在测试的 C# 项目在同一台机器上制作了 C++/CLI 项目。你能在 64 位机器上创建 x86 库吗?
  • 使用dependencywalker.com并打开包装器DLL,看看是否缺少任何依赖项。
  • 使用依赖walker 尝试打开DLL 时出现错误。 “错误:由于隐式依赖模块中缺少导出功能,至少一个模块具有未解析的导入。错误:找到具有不同 CPU 类型的模块。警告:未找到至少一个延迟加载依赖模块。警告:在由于延迟加载相关模块中缺少导出功能,至少有一个模块存在未解析的导入。”它说 IESHIMS.dll 丢失
  • 在找到 IESHIMS.dll 并再次在依赖 walker 中加载 dll 后,我收到以下错误。 “错误:由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入。错误:找到具有不同 CPU 类型的模块。警告:由于缺少导出函数,至少一个模块具有未解析的导入一个依赖于延迟负载的模块。”

标签: .net c++-cli assemblies


【解决方案1】:

我认为问题在于您试图在 64 位解决方案中使用非托管 x86 dll。

尝试做:右键单击您的解决方案,然后单击Configuration manager,并将所有项目设置为x86,然后再次尝试构建。

我很确定您的构建配置不一致,因此出现错误消息(我多次遇到同样的问题......)

你可以在这里阅读:What does the Visual Studio "Any CPU" target mean?

以及 VS 中不同目标的快速概览:http://visualstudiohacks.com/articles/visual-studio-net-platform-target-explained/

【讨论】:

  • 我的解决方案中只有一个项目,我刚刚将 C++ 源文件添加到此解决方案中,是不是这样?我是否应该将整个 C++ 项目添加到解决方案中?在确认管理器中没有 x64/x86 选项,我只能更改构建配置(调试/发布)、平台(win32 是唯一选项)和标记为“构建”的复选框
  • 你不能为你的项目创建一个新的配置吗?
  • @BillWalton 你肯定有两个项目?包含 C++ 类和 C++/CLI 包装类的项目,然后是使用其他项目生成的 DLL 的 C# 项目?
  • 这就是我不明白的 Alastair,你怎么能为一个 C++ 项目做一个 C# 包装,而你的解决方案中只有一个 C++/CLI 项目?
  • @BillWalton 如果您打开“Visual Studio 命令提示符” - 您将在 Visual Studio 开始菜单文件夹中的“Visual Studio 工具”文件夹中找到它。然后导航到包装 DLL 所在的目录并键入:CorFlags.exe yourWrapperdll.dll 并报告它所说的内容
猜你喜欢
  • 1970-01-01
  • 2015-09-17
  • 2016-06-07
  • 1970-01-01
  • 2020-06-04
  • 2021-02-25
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多