首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#编译器能编译VB.Net代码吗?

问C#编译器能编译VB.Net代码吗?
EN

Stack Overflow用户
提问于 2013-12-29 15:54:15
回答 4查看 4.3K关注 0票数 7

我在ASP.NET的一本书上发现了下面的内容。我正在学习和好奇以下内容。

IL体系结构的第二个主要优点是它使框架能够与语言无关。在很大程度上,语言选择不再取决于任何语言对另一种语言的能力,而是取决于开发人员或tam的偏好。您甚至可以在一个应用程序中混合语言。用C#编写的类可以从VB2005类派生,而在C#方法van中抛出的异常可以在VB@005方法中捕获。

我的问题是,ASP.NET是否使用相同的编译器来编译VB.net和C#?

更新:(另一个查询)

C#编译器能编译VB.Net代码吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-29 15:58:29

它们有单独的编译器(csc.exe for C#和vbc.exe for VB.Net),但它们都被编译成IL,然后在运行时JIT将其编译成机器代码。

问题1: C#编译器能编译VB.net代码吗?

答1:不,它不能,你会在下面的例子中看到这一点。如果在查找C#语法时尝试执行此操作,则会出现错误。

问题2:我认为他们在书中是这么说的。因为它是两个编译器,我觉得它不兼容。

答2:它并没有说你可以用C#编译VB代码,但是它说你可以像我在下面的例子中那样将语言混合到一个应用程序中,并且仍然能够编译C#和VB (使用它们的编译器)。

请参阅下面的示例以了解它是如何工作的。我用带有C#类的C#项目和VB类的VB项目创建了一个解决方案。您不应该将C#和VB类混合在同一个项目中,因为如果在构建过程中它是一个C#项目,它将忽略vb文件。

​

​

ClassCSharp.cs的内容:

代码语言:javascript
复制
namespace ClassLibraryCSharp
{
    public abstract class ClassCSharp
    {
        public int MyProperty { get; set; }

        protected abstract void Test();
    }
}

ClassVBInCSharp.vb在C# ClassLibrary中的含量。查看如何从C#类继承,以及如何访问它的属性和重写方法。

代码语言:javascript
复制
Namespace ClassLibraryVB
    Public Class ClassVBInCSharp
        Inherits ClassCSharp
        Property Test2 As Integer

        Protected Overrides Sub Test()
            Test2 = MyBase.MyProperty
        End Sub
    End Class
End Namespace

参见下面我运行的命令:

代码语言:javascript
复制
vbc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVbVersion.dll" "ClassVBInCSharp.vb"
Microsoft (R) Visual Basic Compiler version 12.0.20806.33440
Copyright (c) Microsoft Corporation.  All rights reserved.

参见上文,VB编译器用于编译vb类。

代码语言:javascript
复制
csc.exe /reference:"ClassLibraryCSharp.dll" /target:library /out:"ClassLibraryCSharpVersion.dll" "ClassVBInCSharp.vb"
Microsoft (R) Visual C# Compiler version 4.0.30319.33440 for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.

ClassLibrary1\ClassVBInCSharp.vb(1,1): error CS
0116: A namespace cannot directly contain members such as fields or methods

请参阅上文,如果我尝试使用C#编译器编译vb类,它会抛出一个错误,以寻找C#语法。

票数 10
EN

Stack Overflow用户

发布于 2013-12-29 15:58:35

C#和VB.Net是不同的语言。它们有不同的程序(可执行程序),它们是实际的编译器。这些编译器将高级代码编译为IL,这正是CLR所理解和执行的。

编译器程序可以生成exe或dll。对于asp.net应用程序,程序总是生成动态链接库。

下面的链接将帮助您熟悉c#编译器命令行程序:

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

更新:

问: C#编译器能编译vb代码吗?

答案是:不。

然而,对于一个asp.net网站来说,有可能在一个项目中同时使用c#和vb代码。看看下面的链接,了解如何做到这一点:

http://timheuer.com/blog/archive/2007/02/28/14002.aspx

更新:

为什么它说“多个代码文件仅与网站模型(与codeSubDirectories一起)内在地工作”?

这就是网站模型项目的目的:http://msdn.microsoft.com/en-us/library/dd547590(v=vs.110).aspx#scenarios

票数 5
EN

Stack Overflow用户

发布于 2013-12-29 16:07:18

ASP.Net是一个服务器端的Web应用程序框架,用于Web开发以生成动态网页。

您感到困惑的是语言的编译,现在,C#和VB.Net有了自己的编译器。ASP.Net是一个可以使用C#等语言实现的框架。

因此,不要与语言编译器混淆。每种语言都有各自的编译器,将源代码转换为公共语言运行时(CLR)能够理解的中间语言(IL)代码。因此,像ASP.net这样的web框架是一个提供处理HTTPRequest和HTTPResponse的机制的框架。现在语言编译器将完成将各自的编程语言编译成IL代码的部分工作。

来自MSDN

ASP.NET是一种统一的Web开发模型,它包含了构建企业级Web应用程序所必需的服务,并且编写代码最少。ASP.NET是.NET框架的一部分,在编写ASP.NET应用程序时,您可以访问.NET框架中的类。可以使用与公共语言运行库(CLR)兼容的任何语言编写应用程序代码,包括Microsoft和C#。这些语言使您能够开发从公共语言运行库、类型安全、继承等中受益的ASP.NET应用程序。

更新:

现在回答第二个疑问,你张贴在你的问题的评论部分。( C#编译器能编译VB代码吗)

实际上,你不能。让我们考虑一下C#编译器,像C#或VB这样的编译器所知道的是,您前面有一些代码,您需要理解这些代码,并在本例中提供一个等效的IL代码。这意味着,C#编译器必须使用具有C#语法的代码,而VB编译器必须使用具有VB语法的代码。您可以看到,编译器基本上需要知道它正在编译(处理)什么。现在考虑一些语言X有一个X编译器,现在将编写编译器来破解和解码X语言。

现在,这并不能阻止您编写与C#代码对话的VB代码,反之亦然。那种互操作性。见更多。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20826999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档