将VB.net代码与c#代码混合使用

时间:2010-01-22 14:15:00

标签: c# .net vb.net

我有一个vb.net解决方案,我想添加一个用c#编写的新dll文件,并在vb.net编写的代码中使用dll中的功能。

我对它做了几次使用,似乎工作正常,  但用c#搞乱vb.net代码就像我想做的那样聪明。

我正在做什么有什么危险?

非常感谢您的帮助。

6 个答案:

答案 0 :(得分:11)

您的DLL不是C#DLL,它是.NET DLL。编译完成后,你所拥有的就是IL - 无论它来自何种语言都无关紧要。应该没问题,除非你遇到一个奇怪的边缘情况,其中DLL的接口包含Visual Basic不支持的东西。但这将是一个非常边缘的案例。

公共语言规范(CLS)定义了.NET语言必须支持的.NET功能的子集,如果您的DLL符合CLS,那么您可以毫无问题地使用它。如果你对CLS,CTS,CLR等之间的区别感到困惑,那么我发现它在this book中的覆盖范围非常有用,尽管它主要是一本C#书。

答案 1 :(得分:5)

将您的代码标记为符合CLS,然后C#编译器会警告您,如果您从另一种.Net语言调用DLL时可能会导致任何问题。

来自MSDN的一些引用

  

与其他对象完全交互   不管他们是什么语言   实现在,对象必须暴露给   只调用那些功能   他们必须使用所有语言   与...互操作。为此原因,   Common Language Specification   (CLS),这是一套基本的   许多人需要的语言功能   应用程序已定义。

     

你可以标记组件,模块,   类型和成员使用CLSCompliantAttribute符合CLS。

     

一些符合CLS的语言编译器,   such as the C# compiler,让您   指定您想要的代码   符合CLS标准。这些编译器可以   检查CLS合规性并告诉您   知道您的代码何时使用功能   CLS不支持。

此外,您的组织现在需要C#技能以及Vb.Net技能。您应该说服自己这样做,然后说服关键决策者。

答案 2 :(得分:3)

您可以在同一个项目中混合使用VB和C#代码 - 我已经处理了几个混合它们且没有问题的项目。

你的语言混合似乎更加孤立 - 一个带有多个C#DLL和vb项目的解决方案。

我没有看到很多问题。

答案 3 :(得分:1)

找到了一个解决方案here

  

但是,可以使用   单一的不同语言   项目。您可能需要编写命令   行构建文件来构建项目。   在.NET framework SDK中,有一个   样品就可以了。你可以访问它   C:\ Program Files \ Microsoft Visual   工作室   .NET \ FrameworkSDK \样本\技术\ CrossDevLan   瓜哥。

     

此示例演示了该用途   不同的开发语言   单个项目。此示例创建   两个集会。第一个是图书馆   或定义简单的DLL程序集   用托管编写的基类   C ++的扩展。第二   assembly是一个可执行程序集   它定义了三个派生类   用C#,VB和IL编写   (中级语言)。这些类型   彼此并最终得到   来自托管的基类   C ++。最后,可执行文件创建   每个派生类型的实例   并为每个调用虚拟方法。   .NET Framework是一个环境   各种开发人员都可以工作   在开发过程中无缝地一起   用他们选择的语言。

但是你可以在asp.net应用程序中使用VB.NET和C#代码。

您需要在App_Code文件夹中创建两个文件夹(例如vbFolder和csFolder),并在web.config中编写此代码:

<system.web>    
<compilation>    
<CODESUBDIRECTORIES>    
<ADD directoryName="vbFolder" />    
<ADD directoryName="csFolder" />    
</CODESUBDIRECTORIES>    
</compilation>    
</system.web>  

好的解释是here

答案 4 :(得分:0)

我认为最大的危险是让开发人员了解这两种语言;虽然C#和VB.NET类似,因为它们与.NET框架绑定,但它们有一些特殊性。

你会找到很多优秀的C#程序员和许多优秀的VB.NET程序员,但是为这两种语言找到一个优秀的程序员会有点困难

另外,请看一下这篇文章:A Manager’s Retrospective on the C# versus VB.NET decision,因为它会讨论其他项目,包括开发人员偏好,语言功能和招聘。

答案 5 :(得分:0)

VB.NET和&amp; C#被编译为MSIL(Microsoft中间语言)而不是本机代码,这是通过最终用户机器上存在的.NET框架工作完成对最终用户机器上的本机(机器)的完全编译,因此如果它是.NET对于操作系统x,你的程序应该适用于操作系统x,如果它是操作系统,你的应用程序应该可以正常运行OS,这就是.NET技术带来的解决方案,让.NET应用程序操作系统在 - 依赖

还有一个COM Marshaler服务支持旧组件(控件)与.NET应用程序一起使用,例如,您可以在C#windows应用程序中调用vb6 control(* .ocx)。

这是Microsoft技术和技术之间的完美集成。

并且不需要让开发人员在VB.NET和C#中都很好,但是如果你需要一个,我会在这里:)

但问题是我为什么同时参与?

这只是因为我提供培训,所以我想扩展我的能力,我很惊讶他们两者都非常接近,除了语法。