共用方式為


在 Visual Studio 中使用 Roslyn 語法可視化檢視探索程式代碼

本文提供作為 .NET 編譯程序平臺(“Roslyn”) SDK 一部分的語法可視化檢視工具概觀。 語法可視化檢視是一個工具視窗,可協助您檢查和探索語法樹狀結構。 這是瞭解您想要分析之程序代碼模型的基本工具。 當您使用 .NET 編譯程序平臺 (“Roslyn”) SDK 開發自己的應用程式時,這也是偵錯輔助程式。 當您建立第一個分析器時,請開啟此工具。 可視化檢視可協助您瞭解 API 所使用的模型。 您也可以使用 SharpLabLINQPad 之類的工具來檢查程式碼並瞭解語法樹狀結構。

安裝指示 - Visual Studio 安裝程式

Visual Studio 安裝程式中尋找 .NET 編譯程序平臺 SDK 有兩種不同的方式:

使用 Visual Studio 安裝程式進行安裝 - 工作負載檢視

.NET 編譯程式平臺 SDK 不會自動選取為 Visual Studio 延伸模塊開發工作負載的一部分。 您必須將其選取為選擇性元件。

  1. 執行 Visual Studio 安裝程式
  2. 選取 [修改]
  3. 檢查 Visual Studio 延伸模組開發 工作負載。
  4. 在摘要樹狀結構中開啟 Visual Studio延伸模組開發 節點。
  5. 勾選 .NET 編譯器平台 SDK 的方塊。 您會在可選元件的最下面找到它。

您可以選擇性地讓 DGML 編輯器 在視覺化檢視中顯示圖形:

  1. 開啟摘要樹狀目錄中的 [個別元件 ] 節點。
  2. 勾選 DGML 編輯器 方塊

使用 Visual Studio 安裝程式,在「個別元件」索引標籤中進行安裝

  1. 執行 Visual Studio 安裝程式
  2. 選取 [修改]
  3. 選擇 [個別元件] 索引標籤
  4. 勾選 .NET 編譯器平台 SDK 的方塊。 您會在 [ 編譯程式]、[建置工具和運行時間] 區 段下方的頂端找到它。

您可以選擇性地讓 DGML 編輯器 在視覺化檢視中顯示圖形:

  1. 勾選 DGML 編輯器 的方框。 您會在 [ 程序代碼工具 ] 區段底下找到它。

閱讀概 觀文章, 熟悉 .NET 編譯程式平臺 SDK 中使用的概念。 它提供語法樹狀結構、節點、令牌和附帶資訊的簡介。

Syntax Visualizer

語法可視化檢視可讓您檢查 Visual Studio IDE 內目前使用中編輯器視窗中 C# 或 Visual Basic 程式代碼檔案的語法樹狀結構。 您可以按下 [ 檢視>其他 Windows>語法可視化檢視] 來啟動可視化檢視。 您也可以使用右上角的 [快速啟動 ] 工具列。 輸入 「syntax」,而開啟 [語法可視化檢視] 的 命令應該會出現。

此命令會將 [語法可視化檢視] 開啟為浮動工具視窗。 如果您沒有開啟程式代碼編輯器窗口,顯示會是空白的,如下圖所示。

語法可視化檢視工具視窗

將此工具視窗停駐在 Visual Studio 內的便利位置,例如左側。 可視化檢視會顯示目前程式代碼檔案的相關信息。

使用 [ 檔案>新專案 ] 命令建立新的專案。 您可以建立 Visual Basic 或 C# 專案。 當 Visual Studio 開啟此專案的主要程式代碼檔案時,可視化檢視會顯示專案的語法樹狀結構。 您可以在這個 Visual Studio 實例中開啟任何現有的 C# / Visual Basic 檔案,而可視化檢視會顯示該檔案的語法樹狀結構。 如果您在 Visual Studio 內開啟多個程式代碼檔案,可視化檢視會顯示目前使用中程式代碼檔案的語法樹狀結構(具有鍵盤焦點的程式代碼檔案。

如上述影像所示,可視化檢視工具視窗會顯示頂端的語法樹狀結構,並在底部顯示屬性方格。 屬性方格會顯示在樹狀結構中目前選取的項目的屬性,包括項目的 .NET 類型與 Kind(SyntaxKind)。

語法樹狀結構包含三種類型的元素 – 節點令牌注釋。 您可以在 使用語法 一文中深入瞭解這些類型。 每個類型的項目都會使用不同的色彩來表示。 按兩下 [圖例] 按鈕,以取得所用色彩的概觀。

樹狀結構中的每個項目也會顯示自己的 範圍範圍是文本檔中該節點的索引(開始和結束位置)。 在上述 C# 範例中,選取的 “UsingKeyword [0..5)” 令牌具有寬五個字元 [0..5] 的 Span 。 “[..]” 表示起始索引是範圍的一部分,但結束索引不是。

有兩種方式可以導覽樹形結構:

  • 展開或單擊樹狀結構中的項目。 可視化檢視會自動選取程式代碼編輯器中對應至此專案範圍的文字。
  • 按兩下或選取程式代碼編輯器中的文字。 在上述 Visual Basic 範例中,如果您在程式代碼編輯器中選取包含 「Module Module1」 的行,可視化檢視會自動巡覽至樹狀結構中的對應 ModuleStatement 節點。

可視化檢視會醒目提示樹狀結構中的專案,其範圍最符合編輯器中選取的文字範圍。

可視化檢視會重新整理樹狀結構,以符合使用中程式代碼檔案中的修改。 在Main()中加入對Console.WriteLine()的呼叫。 當您輸入時,視覺化工具會刷新樹狀結構。

在輸入 Console. 後,請暫停輸入。 樹狀結構中有一些以粉紅色著色的項目。 此時,已輸入的程式碼中有錯誤(也稱為「診斷訊息」)。 這些錯誤會附加至語法樹結構中的節點、標記及註釋。 可視化工具會以粉紅色呈現這些背景,來顯示附加至項目的錯誤。 您可以將滑鼠停留在專案上方,以檢查任何彩色粉紅色專案上的錯誤。 可視化工具只會顯示語法錯誤(與輸入程式代碼語法相關的錯誤);它不會顯示任何語義錯誤。

語法圖表

以滑鼠右鍵按兩下樹狀結構中的任何項目,然後按兩下 [ 檢視導向語法圖表]。

視覺化工具顯示以選取項目為根的子樹的圖形表示。 在 C# 範例中,針對對應至 Main() 方法的 MethodDeclaration 節點嘗試這些步驟。 可視化檢視會顯示如下所示的語法圖表:

檢視 C# 語法圖表

語法圖表查看器具有顯示其著色方案的圖例選項。 您也可以將滑鼠停留在語法圖表中的個別專案上,以檢視對應至該專案的屬性。

您可以重複檢視樹狀結構中不同項目的語法圖表,而且圖形一律會顯示在Visual Studio內的相同視窗中。 您可以將此視窗停駐在 Visual Studio 內的便利位置,因此您不需要在索引標籤之間切換,即可檢視新的語法圖表。 程式代碼編輯器視窗下方底部通常很方便。

以下是與視覺化工具視窗和語法圖表視窗搭配使用的佈局:

視覺化工具和語法圖窗口的一種停駐配置

另一個選項是在雙重監視器設定中,將語法圖形視窗放在第二個監視器上。

檢查語意

語法可視化檢視可讓您對符號和語意資訊進行基本的檢查。 在 C# 範例中的 Main() 方法內輸入 double x = 1 + 1;。 然後,在程式代碼編輯器視窗中選取表達式 1 + 1 。 可視化檢視會醒目提示可視化檢視中的 AddExpression 節點。 以滑鼠右鍵點擊此 AddExpression,然後點擊 檢視符號(如果有的話)。 請注意,大部分選單項目都有「如果有的話」限定符。 語法可視化檢視會檢查節點的屬性,包括可能不存在於所有節點的屬性。

可視化工具中的屬性方格會如圖所示地更新。該表達式的符號是 SynthesizedIntrinsicOperatorSymbol,且其 Kind = 方法

語法可視化檢視中的符號屬性

以滑鼠右鍵按AddExpression節點,然後選取檢視 TypeSymbol(如果有)。 視覺化檢視中的屬性方格會更新,如下圖所示,指出所選表示式的類型為 Int32

TypeSymbol 屬性

以滑鼠右鍵按下相同的AddExpression節點,然後選取檢視已轉換的 TypeSymbol(如果有的話)。 屬性方格會更新,指出雖然表達式的類型是 Int32,但表達式的轉換類型如下 Double 圖所示。 此節點包含已轉換的類型符號資訊,因為Int32 表達式出現在一個必須轉換為Double的上下文中。 此轉換滿足 Double 指派運算符左側變數所指定的 x 類型。

轉換後的 TypeSymbol 屬性

最後,以滑鼠右鍵按兩下相同的AddExpression節點,然後選取 [檢視常數值](如果有的話)。 屬性方格顯示,表達式的值是編譯時間常數,其值為2

常數值

上述範例也可以在 Visual Basic 中複寫。 在 Visual Basic 檔案中輸入 Dim x As Double = 1 + 1 。 在程式代碼編輯器視窗中選取表達式 1 + 1 。 可視化檢視器會在檢視器中突出顯示對應的 AddExpression 節點。 針對這個 AddExpression 重複上述步驟,您應該會看到相同的結果。

在 Visual Basic 中檢查更多程式代碼。 使用下列程式代碼更新您的主要 Visual Basic 檔案:

Imports C = System.Console

Module Program
    Sub Main(args As String())
        C.WriteLine()
    End Sub
End Module

此程式代碼引進名為 C 的別名,該別名會對應至 System.Console 檔案頂端的類型,並在內 Main()使用此別名。 請在Main()方法內選擇在C.WriteLine()中使用這個C別名。 可視化檢視會選取可視化檢視中的對應 IdentifierName 節點。 以滑鼠右鍵按兩下此節點,然後按兩下 [檢視符號] (如果有的話)。 屬性方格指出此標識碼系結至類型 System.Console ,如下圖所示:

語法可視化檢視中符號 C 的屬性

以滑鼠右鍵按 IdentifierName 節點,然後選取 [檢視 AliasSymbol](如果有的話)。 屬性方格顯示,識別碼是名稱 C 綁定至 System.Console 目標的別名。 換句話說,屬性方格會提供與標識符C相對應之 AliasSymbol 的相關信息。

AliasSymbol 屬性

檢查與任何宣告類型、方法、屬性相符的符號。 選取可視化檢視中的對應節點,然後按滑鼠右鍵以存取檢視符號(如果有的話)。 選擇 方法 Sub Main(),包括 方法的內容。 以滑鼠右鍵按兩下可視化檢視中對應的 SubBlock 節點,然後選取 [檢視符號](如果有的話)。 屬性方格顯示這個 SubBlockMethodSymbol 名稱為Main,傳回類型為Void

檢視方法宣告的符號

上述 Visual Basic 範例可以輕鬆地在 C# 中複寫。 輸入 using C = System.Console; 取代 Imports C = System.Console 別名。 C# 中的上述步驟會在可視化檢視視窗中產生相同的結果。

語意檢查作業僅適用於節點上。 它們不能應用於代幣或無關緊要的細節。 並非所有節點都有要檢查的有趣語意資訊。 當節點沒有有趣的語意資訊時,以滑鼠右鍵按下並選取 [檢視 * 符號](如果有的話) 會顯示空白的屬性方格。

您可以在使用語意概觀檔中深入瞭解 API 以執行 語意 分析。

關閉語法可視化檢視

當您不使用可視化檢視來檢查原始程式碼時,您可以關閉可視化檢視視窗。 當您瀏覽程式代碼、編輯和變更來源時,語法可視化檢視會更新其顯示。 當你不使用它時,它可能會分散注意力。