【问题标题】:DLL Not found: referencing dependent DLLsDLL Not found: 引用依赖的 DLL
【发布时间】:2011-09-06 19:10:41
【问题描述】:

我正在尝试实现一个在 C# 表单应用程序中使用英特尔性能基元的 C++ DLL(我自己创建的)。当我尝试运行程序时,我收到“DLL Not Found Exception”。本站其他帖子中提出的一个可能原因是必须引用依赖的 DLL,实际上在下载 DpendencyWalker 后我发现我的 DLL 使用“IPPS-7.0.DLL”。

我的问题是我不清楚如何引用这些依赖的 DLL。我已将包含 IPPS-7.0.DLL 的文件夹添加到引用路径以及添加对“IntelCppOptPkg”和“IntelLibOptPgk”程序集的引用,但这并没有解决问题。

那么,我认为这是问题所在是否正确?如果是这样,如何在托管代码中引用依赖 DLL?

谢谢。

【问题讨论】:

    标签: c# c++ dll reference


    【解决方案1】:

    您没有引用它们,它们不是 .NET 程序集。您只需要确保将 DLL(s) 复制到您的构建目录。最简单的方法是使用 Project + Add Existing Item,从复制的任何位置选择 DLL。然后选择添加的文件并在“属性”窗口中设置 Build Action = Content,Copy to Output Directory = Copy if newer。顺便说一句,在源代码管理中签入 DLL 通常是个好主意。

    【讨论】:

    • 当你检查 pdb 的时候。
    【解决方案2】:

    托管代码不能像引用托管程序集一样引用非托管 dll。托管引用实际上会更改程序集的元数据:

    编译器记录静态 生成时在程序集清单的元数据中的引用。 ... 引用程序集的首选方法是使用完整引用, 包括程序集名称、版本、文化和公钥令牌 (如果存在的话)。

    本机 dll 根本没有与之关联的 .NET 元数据。必须在 Post Build 步骤或部署期间手动复制它们。有一个workaround,但如果您的托管应用程序独立于平台(任何 CPU)并且您有 x86 和 x64 版本的非托管 dll,我认为它不会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 2023-03-17
      相关资源
      最近更新 更多