簡體   English   中英

C#編譯器可以編譯VB.Net代碼嗎?

[英]Can C# compiler compile a VB.Net code?

我在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();
    }
}

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

看我下面的命令:

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#語法時拋出錯誤。

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代碼,反之亦然。 這種互操作性。 查看更多

有一個用於C#(CSC.Exe)的編譯器和一個用於VB.NET(Vbc.exe)的編譯器。 這些編譯器不生成機器代碼,而是將相應的語言編譯為中間語言(IL)。 在計算機上執行程序(或運行網站)時,IL被解釋並轉換為在處理器上執行的機器代碼。
ASP.NET使用的編譯器與用於其他.NET程序的編譯器相同,例如Windows應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM