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

你能在同一个项目中为一个类库混合 vb 和 c # 文件吗?有没有什么设置能让这一切成为可能?

尽管后台编译器似乎能够很好地处理这个问题(除了我在同一个名称空间中有两个同名的类而且它没有抱怨之外) ,但是我还是试了一下,没有一个智能感知能够很好地工作。

我们正在尝试从 VB 转换到 C # ,但是 没有完成了所有代码的转换。我有一些新的代码,我需要写,但真的不想做一个新的项目,只是为了它。

153483 次浏览

我不明白你怎么能用 C # 编译器(或 VB 编译器)编译一个项目,而不让它在编译器的错误语言上犹豫不决。

将 C # 代码放在与 VB 项目分开的项目中。您可以将这些项目包括到同一个解决方案中。

您不能在同一个项目中混合 vb 和 c #-如果您注意到在 Visual Studio 中项目文件是。或。Csproj.您可以在一个解决方案内—— vb 中有1个 proj,c # 中有1个 proj。

看起来你可以在 App _ Code 目录下的 web 项目中同时使用它们:

Http://pietschsoft.com/post/2006/03/30/aspnet-20-use-vbnet-and-c-within-the-app_code-folder.aspx

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

它编译得很好,没有抱怨,因为一个 VB.NET 项目实际上只会编译。Vb 文件和 C # 项目实际上只能编译。Cs 文件。它忽略了其他的,因此您没有收到错误。

编辑: 如果添加。Vb 文件到 C # 项目中,在解决方案资源管理器面板中选择该文件,然后查看属性面板,您将注意到 Build Action 是“ Content”,而不是“ Compile”。它被视为一个简单的文本文件,甚至不作为二进制资源嵌入到已编译的程序集中。

编辑: 使用 asp.net 网站,你可以在 vb.net 网站中添加 c # web 用户控件

每种语言需要一个项目。我很有信心,我看到了一个工具,合并组装,如果你找到这个工具,你应该是好去。如果需要在同一个类中同时使用这两种语言,那么应该能够在例如 VB. net 中编写一半语言,然后通过继承 VB. net 类在 C # 中编写其余语言。

正如其他人所说,你不能把两者都放在一个项目中。但是,如果你只有一小段 C # 或 VB 代码,你想在一个项目中用另一种语言包含它们,那么就有自动 转换工具。他们并不完美,但大多数事情他们都做得很好。此外,夏普开发还内置了一个转换实用程序。

冒着重复其他答案的风险,不,你不能在同一个项目中混合使用它们。

除此之外,如果你刚刚完成了 VB 到 C # 的转换,你为什么要用 VB 写新的代码呢?

在某些自定义 MSBuild 开发中可能会出现这种情况。提供的。目标强制项目采用单一语言——但是没有运行时或工具限制来阻止这一点。

VB 和 CS 编译器都可以输出到 模组-CLR 的版本。Obj 文件。使用汇编链接器,您可以从 VB 和 CS 代码中获取模块,并生成单个汇编。

并不是说这将是一个微不足道的努力,但它可能会工作。

尽管 VisualStudio 不支持这一点(您可以使用一些技巧并让 MSBuild 编译两者,但不能从 VisualStudio 内部编译) ,但是 夏普开发支持。你可以在同一个解决方案中同时使用它们(只要你运行的是 Visual Studio Professional 及以上版本) ,所以如果你想继续使用 Visual Studio,最简单的解决方案就是将你的 VB 代码分离到不同的项目中,并以这种方式访问它。

为了。Net 2.0这个工作。如果您使用相关的语言代码创建应用程序代码的子目录,那么它确实可以在同一个项目中编译这两个目录。到目前为止,我正在寻找这是否应该工作在3.5或不尽管。

实际上,几年前我从一个同事那里继承了一个项目,他决定在同一个项目中混合使用 VB 和 C # 网络表单。这种做法奏效了,但维持起来一点也不有趣。

我决定新的代码应该是 C # 类,为了让它们工作,我必须在 web.config 的编译部分添加一个子节点

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

所有 VB 代码放入 App _ Code 中的子文件夹 VB,C # 代码放入 CS 子文件夹。这将产生两个。Dll 文件。它可以工作,但是代码是按照“ codeSubDirectory”中列出的顺序编译的,因此,如果在 C # 和 VB 中都使用接口,那么接口应该在 VB 文件夹中。

中同时引用了 VB 和 C # 编译器

<system.codedom>
<compilers>

该项目目前已经更新到框架3.5,并且仍然可以工作(但是维护起来仍然没有乐趣. .)

为什么不把 VB代码编译成一个库(.dll)呢。以后从代码中引用它,就是这样。托管 dlls包含编译 c#vbMSIL

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

默认情况下,App _ Code 文件夹不允许使用多种编程语言。然而,在网站项目中,您可以修改文件夹结构和配置设置,以支持多种编程语言,如 Visual Basic 和 C # 。这允许 ASP.NET 创建多个程序集,每种语言一个。有关更多信息,请参见 ASP.NET Web 项目中的共享代码文件夹。开发人员通常在 Web 应用程序中包含多种编程语言,以支持独立操作并偏好不同编程语言的多个开发团队。

不,不是在同一个项目中,但是你可以在同一个解决方案中使用它们。 尽管您需要注意您的代码是符合 CLS 的。这意味着您一定没有使用过其他语言无法理解的功能/特性。例如 VB 不理解无符号整数。

是的,您可以添加这两个文件在网站只有如果该项目是一个网络应用程序,它将不允许不同类型的文件。

右键单击“项目”。选择“添加 Asp.Net 文件夹”。 在“文件夹”下,创建两个文件夹,一个名为 VBCodeFiles,另一个名为 CSCodeFiles 在 Web.Config 中添加编译下的新元素

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

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

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

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

<p>@Model.FirstName</p>

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

是的,这是可能的。将 c # 和 vb.net 项目添加到一个单一的解决方案中。

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

第二步: 项目-> 添加引用-> dll 或者前面添加的项目的 exe。

步骤3: 在 vb.net 格式中,您希望使用 c # forms-> import project 的名称空间。

在我们的场景中,它是单个解决方案中的单个 VB.NET 项目(Windows 桌面应用程序)。然而,我们希望利用 VB.NET 中的 C # 特性,如有符号/无符号整数、 XML 文本和字符串特性。因此,根据不同的特性,在运行时我们构建代码文件,使用各自的 Rosalyn 编译器(VB/CS)编译成 DLL,并动态加载到当前程序集中。当然,如果我们大量使用动态 GUID 进行命名以避免冲突,我们必须对动态 DLL 和内存管理进行脱链、卸载、重载、命名等操作。 它工作良好,应用程序用户可以从我们的桌面应用程序连接到任何数据库,编写 SQL 查询,转换连接到 LINQ 连接和编写 LINQ 查询也都需要动态构建源代码,编译成 DLL 和附加到当前的汇编。