在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?

Posted

技术标签:

【中文标题】在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?【英文标题】:Mixing VB.Net and C# Code in an ASP.Net Web Site project? 【发布时间】:2011-01-21 08:07:45 【问题描述】:

这个问题很老,经常被问到,我在这里也有类似的问题,但我的问题更具体一些。

第一季度。在 ASP.Net 网站中混合 C# 和 VB.Net 代码是否合法?它会起作用吗?如果它有效,它是如何完成的?任何样品都会很好。

第二季度。如果混合 C# 和 VB.Net 代码有任何影响,请也分享这些。

我有一个用 VB.Net 编码的 Web 项目。我正在研究该项目的一个模块。我想用 C# 编写代码。我无法将整个项目转换为 C#,因为我不是唯一一个从事该项目的人。但是,我打算构建的模块,我想在 C# 中内置。

我听说在 web 项目的情况下,如果我们在 C# 中编写部分代码并在 VB.net 中编写部分代码,那么将项目编译为 dll 会出现问题。真的吗?如果是,那么解决方案是什么。

另外,如果我在 .Net 中构建动态链接库,那么我可以混合使用 C# 和 Vb.Net 代码吗?

【问题讨论】:

【参考方案1】:

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

App_Code 文件夹中的多种编程语言

由于 App_Code 文件夹中的源代码被编译为单个程序集,因此 App_Code 文件夹中的所有文件必须使用相同的编程语言。例如,App_Code 文件夹不能同时包含 Visual Basic 和 C# 中的源代码。

但是,您可以将 Web 应用程序配置为将 App_Code 文件夹的子文件夹视为单独的可编译单元。然后,每个文件夹都可以包含不同编程语言的源代码。通过在 Web.config 文件的编译元素中创建 codeSubDirectories 元素并添加对子文件夹的引用来指定配置。以下示例说明了如何配置名为 VBCode 和 CSCode 的子文件夹以编译为单独的程序集:

<compilation debug="false">
    <codeSubDirectories>
        <add directoryName="VBCode" />
        <add directoryName="CSCode" />
    </codeSubDirectories>
</compilation>

对 VBCode 和 CSCode 子文件夹的引用不需要包含有关子文件夹中包含的编程语言的任何信息。与 App_Code 文件夹本身一样,ASP.NET 根据子文件夹中的文件推断要使用的编译器。

【讨论】:

给出的解决方案适用于网站项目。然而,Steve 询问了一个不使用 app_code 文件夹的 web APPLICATION 项目。【参考方案2】:

此处得票最多的答案仅适用于网站项目,不适用于 Web 应用项目。我认为许多开发人员通常使用术语“Web 应用程序”而忽略了这样一个事实,即从技术上讲,它在 .NET 中是不同的东西。微软表示,“默认情况下,Web 应用程序是根据项目文件中的语言设置编译的。可以例外,但相对困难。”所以,我假设这样做的唯一方法是在一个解决方案中拥有两个独立的项目。 (同样,网站项目没有解决方案或项目文件。)我不确定所有细节。

【讨论】:

"(同样,一个网站项目没有解决方案或项目文件。)" 实际上它可以有一个解决方案文件(VS 甚至可能会提示你保存一个) ,但是是的,它没有项目。 @user692918: +1 ,对标题和内容进行了更正。我确实有一个网站项目和其他几个项目的解决方案。 以上解决方案是否适用于 Web 应用程序项目?我有多个项目的大型 Web 应用程序。我将使用相同的 Web 项目和其他类库项目在 c# 上添加新的更改。这对我有用吗?【参考方案3】:

看起来你可以在同一个项目中混合它们是你做你需要的代码作为一个控件。因此,如果主站点是 C# 并且您将 VB 部分作为 ascx 控件执行,您可以将其拖放到您的站点中。

我没有意识到你可以做到这一点,但是一个团队成员在他正在做的一项工作上解决了这个问题。

【讨论】:

以上是关于在 ASP.Net 网站项目中混合 VB.Net 和 C# 代码?的主要内容,如果未能解决你的问题,请参考以下文章

在Visual Basic.NET(VB.NET)中开发的ASP.NET Core应用程序,可以吗? VS

如何使用 dotnet cli 命令以 VB.NET 语言创建 ASP.NET Core 项目?

如何在asp.net c# web应用程序中使用asp.net vb页面

在vb.net中使用c#条件运算符[重复]

中继器中的 ASP VB.NET 中继器?

如何使用 vb.net 2003 在 asp.net 1.1 中手动填充数据网格?