new*_*day 6 .net c# vb.net compiler-construction compilation
我在ASP.NET上找到了以下内容.我正在学习并对以下内容感到好奇.
IL体系结构的第二个主要优点是它使Framework能够与语言保持中立.在很大程度上,语言选择不再取决于任何语言相对于另一种语言的能力,而是取决于他们对开发者或tam的偏好.您甚至可以在单个应用程序中混合语言.用C#编写的类可以从VB2005类派生,并且在C @方法中抛出的异常可以在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();
}
}
Run Code Online (Sandbox Code Playgroud)
C#ClassLibrary中ClassVBInCSharp.vb的内容.了解我如何从C#类继承并访问其属性并覆盖该方法.
Namespace ClassLibraryVB
Public Class ClassVBInCSharp
Inherits ClassCSharp
Property Test2 As Integer
Protected Overrides Sub Test()
Test2 = MyBase.MyProperty
End Sub
End Class
End Namespace
Run Code Online (Sandbox Code Playgroud)
看我下面的命令:
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.
Run Code Online (Sandbox Code Playgroud)
见上面的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
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用C#编译器来编译vb类,它会在查找C#语法时抛出错误.
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
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#.这些语言使您能够开发受益于公共语言运行库,类型安全性,继承等的ASP.NET应用程序.
更新:
现在回答您在问题的评论部分发布的第二个疑问.(C#编译器可以编译VB代码)
其实你做不到.让我们考虑C#编译器,C#或VB知道的任何编译器是你在你面前编写的某些代码,你需要理解代码并在这种情况下提供等效的IL代码.这意味着,C#编译器必须使用具有C#语法的代码,并且VB编译器必须使用具有VB语法的代码.您看到编译器基本上需要知道它正在编译(处理).现在考虑一些语言X有一个X编译器,现在编译器将被编写,以便只破解和解码语言X.
现在,这并不能阻止您编写与C#代码对话的VB代码,反之亦然.这种互操作性.查看更多.