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

我在ASP.NET上找到了以下内容。 我正在学习并对以下内容感到好奇。

IL体系结构的第二个主要优点是它使Framework能够与语言保持中立。 在很大程度上,语言选择不再取决于任何语言相对于另一种语言的能力,而是取决于他们对开发者或tam的偏好。 您甚至可以在单个应用程序中混合语言。 用C#编写的类可以从VB2005类派生,并且在C @方法中抛出的exception可以在VB @ 005方法中捕获。

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

更新:(另一个查询)

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

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

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

答1:不可以,你会在下面的例子中看到。 如果您在查找C#语法时尝试执行此操作,则会出错。

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

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

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

解决方案结构

ClassCSharp.cs的内容:

namespace ClassLibraryCSharp { public abstract class ClassCSharp { public int MyProperty { get; set; } protected abstract void Test(); } } 

C#ClassLibrary中ClassVBInCSharp.vb的内容。 了解如何从C#类inheritance并访问其属性并覆盖该方法。

 Namespace ClassLibraryVB Public Class ClassVBInCSharp Inherits ClassCSharp Property Test2 As Integer Protected Overrides Sub Test() Test2 = MyBase.MyProperty End Sub End Class End Namespace 

看我下面的命令:

 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 Compiler用于编译vb类。

 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#语法时抛出错误。

ASP.Net是一个服务器端Web应用程序框架,专为Web开发生成动态Web页面而设计。

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

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

来自MSDN :

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

更新:

现在回答您在问题的评论部分发布的第二个疑问。 (C#编译器可以编译VB代码)

其实你做不到 。 让我们考虑C#编译器,C#或VB知道的任何编译器是你在你面前编写的某些代码,你需要理解代码并在这种情况下提供等效的IL代码。 这意味着,C#编译器必须使用具有C#语法的代码,并且VB编译器必须使用具有VB语法的代码。 您看到编译器基本上需要知道它正在编译(处理)。 现在考虑一些语言X有一个X编译器,现在编译器将被编写,以便只破解和解码语言X.

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

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

编译器程序可以生成exe或dll。 对于asp.net应用程序,该程序始终生成一个DLL。

以下链接将帮助您熟悉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

C#(CSC.Exe)有一个编译器,VB.NET(Vbc.exe)有一个编译器。 这些编译器不生成机器代码,而是将相应的语言编译为中间语言(IL)。 在计算机上执行程序(或运行网站)时,IL被解释并转换为在处理器上执行的机器代码。
ASP.NET使用的编译器与用于其他.NET程序的编译器相同,例如Windows应用程序。