在同一个项目中混合使用C#和VB

你可以在一个类库的同一个项目中混合使用vb和c#文件吗? 有一些设置可以吗?

尽pipe后台编译器似乎处理得很好(除了我在同一个名字空间中有两个同名的命名空间并且没有抱怨的事实),我仍然没有任何的intellisense工作正常。

我们试图从VB转换到C#,但还没有完成转换所有的代码。 我有一些我需要编写的新代码,但并不是真的想为它创​​build一个新的项目。

不,你不能。 一个程序集/项目(每个项目通常编译为1个程序集)必须是一种语言。 但是,您可以使用多个程序集,每个程序集都可以用不同的语言编码,因为它们都编译为MSIL。

它编译得很好,没有抱怨,因为VB.NET项目只会实际编译.vb文件,而C#项目只会实际编译.cs文件。 它忽略了其他的,所以你没有收到错误。

编辑:如果您将一个.vb文件添加到C#项目中,请在解决scheme资源pipe理器面板中select该文件,然后查看属性面板,您会注意到构build操作是“内容”而不是“编译”。 它被视为一个简单的文本文件,甚至不会作为二进制资源embedded到已编译的程序集中。

编辑:与asp.net网站,您可以添加到vb.net网站的c#web用户控制

那么实际上我几年前从一个决定在同一个项目中混合使用VB和C#webforms的同事那里inheritance了一个项目。 这工作,但远远没有乐趣去维护。

我决定新的代码应该是C#类,并让他们的工作,我不得不添加一个子节点的编译部分web.config

<codeSubDirectories> <add directoryName="VB"/> <add directoryName="CS"/> </codeSubDirectories> 

所有VB代码进入名为VB的App_Code的子文件夹和进入CS子文件夹的C#代码。 这将产生两个.dll文件。 它的工作原理,但是代码的编译顺序与“codeSubDirectories”中列出的顺序相同,因此即使在C#和VB中都使用了接口,也应该在VB文件夹中。

我有一个VB和C#编译器的参考

 <system.codedom> <compilers> 

该项目目前更新到框架3.5,它仍然有效(但仍然没有乐趣维护..)

你不能在同一个项目中混合使用vb和c# – 如果你在visual studio中注意到项目文件是.vbproj或者.csproj。 你可以在一个解决scheme – 有1个项目在VB和1在C#。

看起来像这样,你可以在App_Code目录的web项目中使用它们:

http://pietschsoft.com/post/2006/03/30/ASPNET-20-Use-VBNET-and-C-within-the-App_Code-folder.aspx

一些自定义的MSBuild开发可能是可能的。 提供的.targets强制项目是单一的语言 – 但没有运行时或工具限制,防止这种情况。

VB和CS编译器都可以输出到模块 – CLR的.obj文件版本。 使用程序集链接器,可以从VB和CS代码中获取模块,并生成一个程序集。

这不是一个繁琐的工作,但它可能会起作用。

查看这个链接,讨论这个问题,并展示如何在.NET 4.0中的一个项目中组合VB和C#代码

http://msdn.microsoft.com/en-us/library/t990ks23.aspx

演练:在网站项目中使用多种编程语言http://msdn.microsoft.com/en-us/library/ms366714.aspx

默认情况下,App_Code文件夹不允许多种编程语言。 但是, 在网站项目中,您可以修改文件夹结构和configuration设置以支持多种编程语言,如Visual Basic和C# 。 这允许ASP.NET创build多个程序集,每个语言一个。 有关详细信息,请参阅ASP.NET Web项目中的共享代码文件夹。 开发人员通常在Web应用程序中包含多种编程语言,以支持独立运行的多个开发团队,并偏好不同的编程语言。

尽pipeVisual Studio不支持这种方法(你可以做一些技巧,让MSBuild同时编译,但不能在Visual Studio中编译), SharpDevelop的确如此。 您可以在同一个解决scheme中(只要您运行的是Visual Studio Professional及更高版本),所以如果您想继续使用Visual Studio,最简单的解决scheme是将您的VB代码分离到不同的项目中,并以此方式访问它。

我没有看到如何用C#编译器(或VB编译器)编译项目,而不用编译器的错误语言。

保持你的C#代码在你的VB项目的一个单独的项目。 您可以将这些项目包括在同一个解决scheme中。

每种语言你需要一个项目。 我很有信心,我看到一个合并程序集的工具,如果你发现这个工具,你应该好好去。 如果你需要在同一个类中使用这两种语言,你应该可以在VB.net中写一半,然后通过inheritanceVB.net类将其余的写在C#中。

冒着回应所有其他答案的风险,不,你不能在同一个项目中混用它们。

除此之外,如果您刚完成将VB转换为C#,为什么要在VB中编写新代码?

对于.net 2.0这个工作。 如果您使用相关的语言代码在应用程序代码中创build子目录,它会在同一个项目中进行编译。 到目前为止,我正在寻找这是否应该在3.5工作。

正如其他人所说,你不能把两者都放在一个项目中。 但是,如果您只是想要在其他语言的项目中包含一小段C#或VB代码,则会有自动转换工具 。 他们并不完美,但他们做的很好。 此外, SharpDevelop内置了一个转换实用程序。

为什么不把你的VB代码编译成一个库( .dll ),稍后从代码中引用它就是了。 托pipedlls包含编译c#vb MSIL

不,不在同一个项目中,但是你可以在同一个解决scheme中使用它们。 尽pipe你需要注意你的代码是符合CLS的。 这意味着您不能使用其他语言无法理解的function/function。 例如VB不理解未签名的整数。

是的,它可能。joinc#和vb.net项目到一个单一的解决scheme。

步骤1:文件 – >添加 – >现有项目

第二步:项目 – >添加引用 – > DLL或项目你以前添加的EXE。

第3步:在vb.net窗体中,你想使用c#forms->导入项目的命名空间。

是的,您只能在网站中添加这两个文件。如果该项目是一个Web应用程序,它将不允许不同types的文件。

用鼠标右键单击该项目。 select添加Asp.Net文件夹。 在“文件夹”下,创build两个名为VBCodeFiles的文件夹,在Web.Config中的其他CSCodeFiles在编译下添加一个新元素

 <compilation debug="true" targetFramework="4.5.1"> <codeSubDirectories> <add directoryName="VBCodeFiles"/> <add directoryName="CSCodeFiles"/> </codeSubDirectories> </compilation> 

现在,创build一个cshtml页面。 使用添加对VBCodeFiles.Namespace.MyClassName的引用

 @using DMH.VBCodeFiles.Utils.RCMHD @model MyClassname 

其中MyClassName是在上面命名空间中find的类对象。 现在使用cshtml文件在剃刀上写出对象。

 <p>@Model.FirstName</p> 

请注意,如果这是一个C#项目,directoryName =“CSCodeFiles”是多余的,如果这是一个VB.Net项目,directoryName =“VBCodeFiles”是多余的。