从vb.net的dll中是否可以导入c#类库中的类?

5
  • 集成开发环境:VS2010
  • .net框架版本:4.0

我在Visual Studio 2010下创建了一个C# DLL项目,其中包含几个公共类。我想在另一个VB.NET DLL项目中使用这些类。

在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是未知的或没有公共成员。

谢谢。

4个回答

5

我认为你应该重新编写你的导入语句

导入 MyCSharpNamespace

不需要包含 'MyCSharpDll' 部分


非常好!!但我不明白为什么在我的情况下我不能写完整的导入语句。注意:一开始,我尝试了这个语句,但它没有起作用,现在可以了。 - Alain
因为'MyCSharpDll'不是一个命名空间。 - Steve
我的信息表述不够清晰,但 MyCSharpDll 是该 DLL 的根命名空间,抱歉。 - Alain
1
@Alain - C#没有像VB一样的“根”命名空间概念。C#有一个在新文件中使用的“默认”命名空间。命名空间语句中的内容是类的命名空间。 - Chris Dunaway

4
你问:“我在Visual Studio 2010下创建了一个c#的dll项目,包含多个公共类。现在我想在另一个vb.net编写的dll项目中使用这些类,是否可以实现呢?" 是的,你可以做到。 只需将该DLL添加为引用即可!

我按照我的信息将引用放到了dll中。也许在c#项目中我需要设置一些东西吗? - Alain
6
几乎正确。 导入的 DLL 需要符合 CLS,并且编译时必须针对相同的运行时版本才能成功导入。 - Oded
1
嗨Dmitry,根据@Steve的回答,是的。 - Alain
@Oded,它们都符合CLS并针对相同的运行时版本进行编译。 - Alain

4
假设所涉及的动态链接库 符合CLS标准 并且编译与相同版本的运行时,您就应该能够无问题地使用它。
如果这两个条件中的任何一个(或两者都)不满足,则您将无法使用导入的 DLL。
请确保 Import 指令使用在程序集元数据中定义的命名空间 - 查看您的 C# 项目属性以查看默认命名空间是什么,这就是您需要导入的命名空间。

我的C# DLL的默认命名空间是“MyCSharpDll”。 看了@Steve的答案,但我仍然不明白为什么我不能像其他导入语句一样使用完整的导入语句导入我的C#类,例如MyCShrapDl.MCSharpNamespace。 - Alain

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接