【问题标题】:cannot add a reference .NET无法添加引用 .NET
【发布时间】:2012-03-08 15:15:57
【问题描述】:

我有一个 DLL,我想添加它作为对我的项目的引用,但每次我尝试这样做时都会弹出一个对话框告诉我:

无法添加引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。

我进行了一些研究,发现错误是因为程序集不受 .NET 管理,我应该使用 DLLImport 属性,但是,我在另一台计算机上有相同的确切解决方案,并且一切正常。

不同之处在于我尝试添加引用的新计算机是 x64 而旧计算机是 x86。

我同时拥有 x64 和 x86 DLL,但无法添加任何内容。为什么会这样?

【问题讨论】:

  • 您可能需要答案中提到的 DllImport 和 P/Invoke 东西。

标签: c# .net visual-studio-2010


【解决方案1】:

您不能在 Visual Studio 中添加非托管 DLL 作为引用,无论 32/64“位”如何。而且我怀疑它在您的 x86 机器上是否有效。

“普通”DLL 和 COM-DLL 之间存在差异。

您可以在向系统注册后添加对 COM-DLL 的引用(实际上您引用了公开的 COM 对象,并且自动添加了对 DLL 的引用)。这可以在“添加引用”对话框的“COM”选项卡上完成(在大多数情况下,您必须确保您的项目构建为 x86 目标)。

“正常”DLL 可以——正如我所说的——根本不被添加。您可以在解决方案中包含它们(右键单击解决方案,选择“添加现有文件”),但除非您声明类似

,否则它们不会被引用
[DllImport("...")]
public static extern void MyFunction();

我怀疑在您的其他解决方案中,存在某种包装 DLL,您实际上正在引用它并包含 DLL 导入。

【讨论】:

  • 我构建到一个自定义目录,如 ../bin/ 并将所需的 DLL 放在该目录中,这样我的应用程序就可以在默认情况下看到它们的位置。简单!
【解决方案2】:

您的问题有多个答案:

  1. 您可能会遇到此问题,因为您尝试添加的程序集是针对 x86 处理器体系结构进行编译的。只需尝试将目标平台从 x64 更改为 x86,即使这不起作用,请尝试将其更改为 AnyCPU。 AnyCPU 平台目标使您的应用程序在这两种架构上都可执行,因为它是无架构的。

  2. 如果程序集恰好是一个 DLL,并且不能作为引用添加,那么它是 不是 COM 以及 .NET 程序集。它将像其他程序一样是本机程序集(例如,shell32.dll、user32.dl 等)。您必须通过 DllImport 属性使用它们,但您必须首先检查该 dll 的 文档 以获取该 dll 中实现的功能列表。

    李>

【讨论】:

    【解决方案3】:

    Type Library Importer (Tlbimp.exe) 可能会有所帮助。它创建一个包装器 .NET dll。原始 COM DLL 必须仍然存在并且必须注册! (尝试先注册它,然后再尝试使用 TlbImp。)

    如果 64 位版本不起作用,请在项目构建属性中将平台目标设置为 x84

    【讨论】:

      【解决方案4】:

      有些 DLL 不能作为引用添加,但是,它们仍然可以被 C# 使用,著名的[DllImport( params go here...)]

      您可能还需要inspect dll 才能获得您要使用的函数的地址。这可以通过使用GetProcAddress来实现

      【讨论】:

        【解决方案5】:

        在尝试分析问题后,我发现以下内容

        [1] 有时您会在参考管理器中看到该参考,但您不会在提到的目录中找到 dll 文件 参考管理器无法实现参考。

        [2]检查你的dll文件的权限。

        【讨论】:

          【解决方案6】:

          尝试将您的平台目标从任何 CPU 更改为 x86。 (项目属性 -> 构建 -> 平台目标)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-23
            • 1970-01-01
            • 2019-07-31
            • 1970-01-01
            • 1970-01-01
            • 2012-02-15
            • 2016-09-15
            相关资源
            最近更新 更多