【问题标题】:Cannot add a managed .dll into a C# project无法将托管 .dll 添加到 C# 项目中
【发布时间】:2015-08-20 11:22:44
【问题描述】:

我有一个 C++ 库并在 C# 解决方案中使用我创建了一个 CLR 项目(托管)。因此,我已将托管 .dll 包含在我想要的 C# 项目中。智能感知可以看到它,我可以访问该库中的类,但是当我编译代码时“找不到类型或命名空间名称“XXXX”(您是否缺少 using 指令或程序集引用?)。 我尝试清理和重建项目,重新启动 Visual Studio (2013),将其删除并再次添加引用等等,但没有成功。

谢谢!

【问题讨论】:

  • 嗯,我记得在学校做这个。但是你不需要中间人吗?充当本机代码和 C# 之间桥梁的包装器引用类?该类将调用本机函数并且可以从 C# 中使用。
  • 你把它作为参考添加到References下了吗?
  • 通常这是因为您要链接的库是为 64 位编译的,而您正在为 AnyCPU 或 32 位编译。确保两个项目的架构匹配。但是我会说,如果您只是通过将非托管 DLL 包含在托管 C++ 项目中并链接来尝试使用非托管 DLL,您仍然需要 something 来编组托管/非托管代码,这不仅仅是魔术因为您添加了额外的步骤。
  • @Placeable,我已经说过我创建了一个托管项目。这是我在 C++ 和 C# 之间的桥梁。
  • @Matthew Watson:是的,包括在内

标签: c# c++ .net dll managed


【解决方案1】:

发现问题了!托管代码似乎是在 4.5 框架上构建的,而我要引入 .dll 的项目是在 4.0 框架上。

【讨论】:

    【解决方案2】:

    试试这个:

    右键单击项目引用中的 dll

    选择属性

    将“嵌入互操作类型”设置为 false

    【讨论】:

      【解决方案3】:

      如果您的托管桥调用一些非托管代码,您需要确保 Visual Studio 将本机(非托管)库复制到正确的子目录。 IDE 将按预期复制托管桥代码(即复制到 Release 或 Debug 或任何子目录),但它对桥代码和非托管代码之间的链接知之甚少,无法将非托管库复制到正确的位置.

      【讨论】:

        猜你喜欢
        • 2018-04-04
        • 2016-12-12
        • 1970-01-01
        • 2019-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多