使用 Code Map 來對應相依性

在本文中,您將會了解如何使用 Code Map,將程式碼之間的相依性視覺化。

什麼是 Code Map?

在 Visual Studio 中,Code Map 可協助您更快速地查看程式碼如何搭配運用,而無須閱讀所有檔案和程式碼行。 透過這些對應,您可以看到程式碼中的組織和關聯性,包括其結構和相依性、更新方式,以及預估建議變更的成本。

View dependencies with code maps in Visual Studio

您可以針對這些語言的程式碼對應相依性:

  • 解決方案或組件中的 Visual C# 或 Visual Basic (.dll.exe)

  • Visual C++ 專案、標頭檔 (.h#include) 或二進位檔案中的原生或受控 C 或 C++ 程式碼

  • 由 .NET 模組製作的 Microsoft Dynamics AX X++ 專案和組件

注意

針對 C# 或 Visual Basic 以外的專案,啟動 Code Map 或是將項目加入現有的 Code Map 之選項較少。 例如,您無法以滑鼠右鍵按一下 C++ 專案中 [文字編輯器] 的物件並將它加入 Code Map。 不過,您可以從方案總管類別檢視物件瀏覽器拖放個別程式碼元素或檔案。

必要條件

若要在 Visual Studio 中建立 Code Map,請先安裝 Code MapLive Dependency Validation 元件

若要建立和編輯 Code Map,您需要 Visual Studio Enterprise 版本。 不過,在 Visual Studio Community 和 Professional 版本中,您可以開啟在 Enterprise 版本中產生的圖表,但是無法編輯。

注意

在您與使用 Visual Studio Professional 的其他人共用在 Visual Studio Enterprise 中建立的對應時,請確定對應中的所有項目都可見,例如隱藏項目、展開的群組和跨群組連結。

新增 Code Map

您可以建立空白的 Code Map,並將項目拖曳到其中,包括組件參考、檔案和資料夾,也可以為部分或整個解決方案產生 Code Map。

若要新增空白的 Code Map:

  1. 在 [方案總管] 中,開啟最上層方案節點的捷徑功能表。 選擇 [新增]> [新增項目]

  2. 在 [新增項目] 對話方塊的 [已安裝] 下,選擇 [一般] 類別。

  3. 選擇 Directed Graph Document(.dgml) 範本,然後選取 [新增]

    提示

    此範本可能不會依字母順序顯示,因此如果您看不到範本,請向下捲動至範本清單的底部。

    有一個空白對應會出現在您解決方案的 [解決方案項目] 資料夾中。

同樣地,您可以選取 [結構]> [新增 Code Map] 或 [檔案]> [新增]> [檔案],建立新的 Code Map 檔案,而不將其新增至您的解決方案。

深入了解:

為您的解決方案產生 Code Map

若要查看解決方案中的所有相依性:

  1. 在功能表列上,選擇 [結構]> [產生解決方案的 Code Map]。 如果您的程式碼自您上次建置之後未曾變更,您可以改為選取 [結構]> [產生解決方案的 Code Map 而不建置]

    Generate a code map command

    對應隨即產生,顯示最上層組件和組件之間的彙總連結。 彙總連結愈廣,代表的相依性就愈高。

  2. 使用 Code Map 工具列上的 [圖例] 按鈕以顯示或隱藏專案類型圖示清單 (例如測試、Web 和 Phone 專案),程式碼項目 (例如類別、方法和屬性),和關聯性類型 (例如「繼承自」、「實作」,和「呼叫」)。

    Top-level dependency graph of assemblies

    此範例方案包含方案資料夾 ([測試] 和 [元件] )、測試專案、Web 專案和組件。 所有內含項目關聯性預設會顯示為 「群組」(group),您可將其展開及摺疊。 [外部] 群組中含有在您的方案之外的任何項目,包括平台相依性。 外部組件只會顯示所使用的項目。 根據預設,系統基底類型在對應中會隱藏,以減少雜亂。

  3. 若要向下切入到對應,請展開代表專案和組件的群組。 您可以藉由按下 CTRL + A 選取所有節點,然後從捷徑功能表選擇 [群組] 、[展開] ,展開所有項目。

    Expanding all groups in a code map

  4. 不過,這可能不適用於大型的方案。 事實上,對於複雜的方案而言,記憶體限制可能會導致您無法展開所有群組。 相反地,若要查看個別節點的內部,請展開它。 將滑鼠指標移至節點上方,然後按一下出現的>形箭號 (向下箭號)。

    Expanding a node in a code map

    或使用鍵盤選取項目,然後按下加號鍵 (+)。 若要瀏覽更深層的程式碼,請為命名空間、類型和成員執行相同的作業。

    提示

    如需使用滑鼠、鍵盤和觸控處理 Code Map 的詳細資訊,請參閱瀏覽和重新排列 Code Map

  5. 若要簡化對應,並將焦點放在個別部分,請選擇 Code Map 工具列上的 [篩選] ,然後只選取您感興趣的節點和連結類型。 例如,您可以隱藏所有的方案資料夾和組件容器。

    Simplify the map by filtering containers

    您也可以隱藏或移除對應上的個別群組和項目來簡化對應,而不會影響基礎的方案程式碼。

  6. 若要查看項目之間的關聯性,請在對應中加以選取。 連結的色彩表示關聯性的類型,如 [圖例] 窗格中所示。

    View dependencies across your solutions

    在此範例中,紫色連結是呼叫、虛線的連結是參考,而淺藍色連結則是欄位存取。 綠色的連結可以是繼承,或者可以是 「彙總連結」 (aggregate link),表示多個關聯性類型 (或 「分類」(category))。

    提示

    如果看到綠色連結,可能不表示只有繼承關聯性。 也有可能是方法呼叫,但是繼承關聯性將其隱藏。 若要查看特定類型的連結,請使用 [篩選] 窗格中的核取方塊,隱藏您不感興趣的類型。

  7. 若要取得項目或連結的詳細資訊,請將指標移到頂端,直到出現工具提示。 這會顯示程式碼項目或連結代表的類別分類的詳細資料。

    Show the categories of a relationship

  8. 若要檢查彙總連結代表的項目和相依性,請先選取連結,然後開啟其捷徑功能表。 選擇 [顯示參與連結] (或 [在新 Code Map 上顯示參與連結] )。 這會展開在連結兩端的群組,並只顯示參與此連結的項目和相依性。

  9. 若要將焦點放在對應的特定部分,您可以繼續移除您不感興趣的項目。 例如,若要向下鑽研到類別和成員檢視,只要篩選 [篩選] 窗格中的所有命名空間節點。

    Drilling down to class and member level

  10. 專注於複雜方案對應的另一個方法是產生新的對應,其中包含來自現有對應的選取項目。 選取您想要專注的項目時按住 Ctrl,開啟捷徑功能表,然後選擇 [從選取範圍新增圖形]

    Show selected items on a new code map

  11. 包含的內容會轉至新的對應。 使用 [篩選] 窗格隱藏方案資料夾和您不想查看的其他容器。

    Filter the containers to simplify the view

  12. 展開群組,然後選取對應中的項目以檢視關聯性。

    Select items to view the relationships

另請參閱:

檢視相依性

假設您有要在出現暫止變更的某些檔案中,執行程式碼檢閱。 若要查看這些變更中的相依性,您可以從那些檔案建立 Code Map。

Show specific dependencies on a code map

  1. 方案總管中,選取您要對應的專案、組件參考、資料夾、檔案、類型或成員。

    Select the items you want to map

  2. 在 [方案總管] 工具列上,選擇 [在 Code Map 上顯示]Create New Graph From Selected Nodes Button。 或針對一個或一組項目開啟捷徑功能表,然後選擇 [在 Code Map 上顯示]

    您也可以從 [方案總管]、[類別檢視] 或 [物件瀏覽器] 將項目拖曳至新的或現有的 Code Map。 若要包含項目的父階層,請按住 Ctrl 鍵不放同時拖曳項目,或使用 Code Map 工具列上的 [包含父代] 按鈕,指定預設動作。 您也可以從 Visual Studio 外部拖曳組件檔,例如從 Windows 檔案總管

    注意

    當您從跨多個應用程式 (如 Windows Phone 或 Microsoft Store) 共用的專案中加入項目時,這些項目會與目前作用中的應用程式專案出現在對應上。 如果您將內容變更為其他應用程式專案,並且從共用專案加入更多項目,這些項目現在會與新的作用中應用程式專案一起顯示。 您使用對應中項目執行的作業僅適用於共用相同內容的項目。

  3. 對應會在其包含的組件內顯示選取的項目。

    Selected items shown as groups on the map

  4. 若要瀏覽項目,請將其展開。 將滑鼠指標移至項目上方,然後按一下出現的>形箭號 (向下箭號) 圖示。

    Expand a node in a code map

    若要展開所有項目,請使用 Ctrl+A 進行選取,然後開啟對應的捷徑功能表並選擇 [群組]> [展開]。 不過,如果展開所有群組會產生無法使用的對應或記憶體問題,則無法使用此選項。

  5. 繼續展開您感興趣的項目,視需要可一直到類別和成員層級。

    Expand groups to class and member level

    若要查看在程式碼中,但不會出現在對應上的成員,請按一下群組左上角的 [重新擷取子系] 圖示 Refetch Children Icon

  6. 若要查看與對應上之項目相關的其他項目,請選取一個,在 Code Map 工具列上選擇 [顯示相關] ,然後選取要加入對應的相關項目類型。 或者,選取一或多個項目,開啟捷徑功能表,然後針對要加入對應的相關項目類型選擇 [顯示] 選項。 例如:

    對於 組件,選擇:

    選項 描述
    顯示這一項參考的組件 加入這個組件參考的組件。 外部組件會出現在 [外部] 群組中。
    顯示參考這一項的組件 從參考這個組件的方案中加入組件。

    對於 命名空間,選擇 [顯示包含的組件] (如果看不到的話)。

    對於 類別介面,選擇:

    選項 描述
    顯示基底類型 對於類別,加入基底類別和實作的介面。

    對於介面,加入基底介面。
    顯示衍生類型 對於類別,加入衍生類別。

    對於介面,加入衍生介面和實作類別或結構。
    顯示這一項參考的類型 加入這個類別使用的所有類別和其成員。
    顯示參考這一項的類型 加入使用這個類別的所有類別及其成員。
    顯示包含的命名空間 加入父命名空間。
    顯示包含的命名空間和組件 加入父容器階層架構。
    顯示所有基底類型 以遞迴方式加入基底類別或介面階層架構。
    顯示所有衍生型別 對於類別,以遞迴方式加入所有衍生類別。

    對於介面,以遞迴方式加入所有衍生介面和實作類別或結構。

    對於 方法,選擇:

    選項 描述
    顯示這一項呼叫的方法 加入這個方法呼叫的方法。
    顯示這一項參考的欄位 加入這個方法所參考的欄位。
    顯示包含的類型 加入父類型。
    顯示包含的類型、命名空間和組件 加入父容器階層架構。
    顯示覆寫方法 對於覆寫其他方法或實作介面方法的方法,加入所覆寫之基底類別中的所有抽象或虛擬方法,以及所實作之介面的方法 (若有的話)。

    對於 欄位屬性,選擇:

    選項 描述
    顯示包含的類型 加入父類型。
    顯示包含的類型、命名空間和組件 加入父容器階層架構。

    Show methods called by this member

  7. 對應會顯示關聯性。 在此範例中,對應會顯示由 Find 方法呼叫的方法,以及它們在解決方案或外部的位置。

    Show specific dependencies on a code map

  8. 若要簡化對應,並將焦點放在個別部分,請選擇 Code Map 工具列上的 [篩選] ,然後只選取您感興趣的節點和連結類型。 例如,關閉方案資料夾、組件和命名空間的顯示。

    Use the Filter pane to simplify the display