在同一应用程序中使用VB.NET和C#?

在同一应用程序中使用VB.NET和C#?,c#,vb.net,visual-studio-2005,C#,Vb.net,Visual Studio 2005,我正在MS Visual Studio 2005中开发一个基于GUI的应用程序,我只想 了解是否可以在同一项目中同时使用VB.NET和C#。或者我可以在我的VB.NET项目中包含一个用C#编写的模块吗 我有一个用C#编写的类,我想在基于VB.NET的项目中使用它,因此如果我可以包含并调用该项目中的函数,那么我就不必在VB.NET中再次编写该类 所以,请帮助我,因为我是一个新的.NET编程 我自己从来没有这样做过,但我知道你可以将C代码编译成dll,然后在你的VB项目中加载并引用该dll 发件人:

我正在MS Visual Studio 2005中开发一个基于GUI的应用程序,我只想 了解是否可以在同一项目中同时使用VB.NET和C#。或者我可以在我的VB.NET项目中包含一个用C#编写的模块吗

我有一个用C#编写的类,我想在基于VB.NET的项目中使用它,因此如果我可以包含并调用该项目中的函数,那么我就不必在VB.NET中再次编写该类


所以,请帮助我,因为我是一个新的.NET编程

我自己从来没有这样做过,但我知道你可以将C代码编译成dll,然后在你的VB项目中加载并引用该dll

发件人:

我想你想要的C代码 必须将use编译为DLL。一旦 完成后,只需添加一个引用 将该项目添加到您的VB.Net 项目中,导入所需的命名空间 需要,然后你可以使用C# 代码

另请参见(来自MSDN,适用于VS2005)

我只是想知道在同一个项目中同时使用VB和C#是否可行

不,不在同一个项目中。另一方面,您可以在相同的解决方案中使用它们

或者我可以在我的VB.net项目中包含一个用C#编写的模块


我建议您创建一个包含两个项目的解决方案:一个在C#中,它形成了一个从VB项目中使用的库。这很简单,易于维护和扩展。

您还需要确保您的C代码符合CLS。这意味着它不会公开任何其他.NET语言无法理解的功能(例如,未签名的INT-在VB中不存在,或仅按大小写区分不同的类-因为VB不区分大小写)。要做到这一点,您需要添加一个属性,以便在您违反任何准则时编译器将引发错误。演示如何执行此操作:

CLSCompliant属性可应用于程序集、模块、, 类型和成员

要将整个程序集标记为符合CLS,请使用以下语法 使用

using System; 
[assembly:CLSCompliant(true)]
[CLSCompliant(true)]  
public void MyMethod()`
要将特定方法标记为符合CLS,请使用以下语法 使用

using System; 
[assembly:CLSCompliant(true)]
[CLSCompliant(true)]  
public void MyMethod()`

如果您只计划在VisualBasic项目中使用该模块,那么您应该考虑只将代码转换为VisualBasic。如果您需要在C#和程序中使用该模块,我将使用上面发布的解决方案之一

您可以尝试类似*。它将C#转换为VB.NET代码。当我必须转换网络上用C#编写的内容时,我只使用此页面。

将VB.net和C#代码放在单独的项目中。(我在我的开源项目中同时使用了VB.NET和C#,效果非常好)


您不必担心DLL,只需引用项目即可(使用“添加引用”对话框中的“项目”选项卡)。例如,如果您需要在C#代码/项目中使用函数,请在VB.NET项目中添加对C#项目的引用。

您还必须知道,如果您有一个项目,该项目在同一解决方案中,其中一个项目引用了另一个,重新生成解决方案后,应用于引用项目的更改将仅对其他项目可用。这就像有二进制引用,但是能够在同一个解决方案上更改代码

就个人而言,我不喜欢这样,但我总是在引用项目中修改代码,不知道为什么我的更改不在我使用它的代码中,我发现,哦,我必须重建

对于临时帮助,它是可以接受的,但不适用于每天编程。

不能在同一项目中使用C#文件和VB文件。但是,您可以将VB和C#项目放在同一个解决方案中并引用它们

在代码中,您可以使用:

Imports namespace 

一旦将引用添加到适当的项目中,就可以构建解决方案了


您也可以在单独的解决方案中创建VB.NET库,编译它并将DLL导入C#项目,反之亦然。

非常感谢您的及时回复。。。我想你告诉我的和Jared一样,但更容易做,所以我会用Jared的解决方案…@Martin-从VB8(2005)开始,VB确实支持无符号整数。啊,我的错误-我不是VB程序员。尽管它们仍然不符合CLS,因此错误仍然会被标记,即使我猜在这种特定情况下您可以忽略它。