【问题标题】:Is it possible to import c# classes from dll in a vb.net dll?是否可以从 vb.net dll 中的 dll 导入 c# 类?
【发布时间】:2012-02-16 12:13:31
【问题描述】:
  • IDE:VS2010
  • Framework.net:4.0

我在 Visual Studio 2010 下创建了一个 c# dll 项目,其中包含几个公共类,我想在另一个 dll 项目中使用它的类,但用 vb.net 编写。

在 vb.net dll 项目中,我引用了构建的 c# dll,但无法导入 c# 类。 c# dll的命名空间甚至无法识别。

我必须做什么才能看到我的 c# 课程? 如果可以的话。

我的 c# dll 的类示例(命名空间 MyCSharpDll):

namespace MyCSharpNamespace {
  public class MyCSharpClass {
    public void Test() {}
  }
}

我的 vb.net dll 文件中的示例:

Imports MyCSharpDll.MyCSharpNamespace

VS2010 指出一个错误,指出 MyCSharpDll 未知或没有公共成员。

谢谢。

【问题讨论】:

    标签: c# vb.net visual-studio-2010 dll reference


    【解决方案1】:

    我认为你应该重写你的导入

    导入 MyCSharpNamespace

    没有“MyCSharpDll”部分

    【讨论】:

    • 非常好!!但我不明白为什么我不能在我的案例中编写完整的导入声明。注意:一开始我试过这个说法,但是没用,现在可以了。
    • 因为 'MyCSharpDll' 不是命名空间。
    • 我的消息中并不清楚,但 MyCSharpDll 是 dll 的根命名空间,对不起。
    • @Alain - C# 没有像 VB 那样的“根”命名空间的概念。 C# 有一个在新文件中使用的“默认”命名空间。命名空间语句中的任何内容都是类的命名空间。
    【解决方案2】:

    您问:“我在 Visual Studio 2010 下创建了一个 c# dll 项目,有几个公共类,我想在另一个 dll 项目中使用它的类,但用 vb.net 编写。”

    是的,你可以做到。

    只需添加到该 DLL 引用即可!

    【讨论】:

    • 我把对 dll 的引用放在我的消息中。也许在 c# 项目中我必须设置一些东西?
    • 几乎正确。导入的 DLL 需要符合 CLS 并针对相同的运行时版本进行编译才能成功导入。
    • 嗨,Dmitry,@Steve 的回答是,是的。
    • @Oded,它们都符合 CLS 并针对相同的运行时版本进行编译。
    【解决方案3】:

    假设有问题的 dll 是 CLS compliant 并针对相同的运行时版本编译,您应该可以毫无问题地使用它。

    如果不满足这两个条件中的一个(或两个),您将无法使用导入的 DLL。

    确保Import 指令使用程序集元数据中定义的命名空间 - 查看您的 C# 项目属性以了解默认命名空间是什么,这就是您需要导入的内容。

    【讨论】:

    • 我的 c# dll 的默认命名空间是“MyCSharpDll”。请参阅@Steve 的答案,但我仍然不明白为什么我无法使用完整的导入语句导入我的 c# 类,即 MyCShrapDl.MCSharpNamespac,就像我的其他导入一样。
    【解决方案4】:

    您需要添加对 C# dll 的引用。

    http://msdn.microsoft.com/en-us/library/wkze6zky%28v=vs.80%29.aspx

    现在您可以从 VB.NET 实例化一个 C# 类:

    Dim cClass = New MyCSharpNamespace.MyCSharpClass()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多