Share via


使用圖層圖表驗證程式碼

若要確定程式碼不會與其設計相衝突,請在 Visual Studio Ultimate 和 Visual Studio Premium 中以分層圖驗證程式碼。 這可協助您:

  • 尋找在您的程式碼與分層圖相依性之間的衝突。

  • 尋找可能會受到建議變更所影響的相依性。

    例如,您可以編輯圖層圖表來顯示潛在的架構變更,然後驗證程式碼,以便查看受影響的相依性。

  • 將程式碼重構或移轉至不同設計。

    在您將程式碼移至不同的架構時,請尋找需要運作的程式碼或相依性。

您可以在 Visual Studio 中的開放分層圖或從命令提示字元手動驗證程式碼。 您也可以在執行本機組建或 Team Foundation Build 時自動驗證程式碼。 請參閱 Channel 9 影片:使用圖層圖表設計和驗證架構

重要

如果您要以 Team Foundation Build 執行圖層驗證,您也必須在您的組建伺服器上安裝 Visual Studio Ultimate。

需求

  • Visual Studio Ultimate 或 Visual Studio Premium

  • 在您的 Team Foundation Build 伺服器的 Visual Studio Ultimate 使用 Team Foundation Build 自動驗證程式碼

  • 包含具有分層圖的模型專案的方案。 這張分層圖必須與您想要驗證的 Visual C# .NET 或 Visual Basic .NET 的成品連結。 請參閱 從程式碼建立分層圖

  • 查看項目是否支援驗證

  • 包含其他 .NET 組件和專案來進行驗證

  • 手動驗證程式碼

  • 自動驗證程式碼

  • 疑難排解圖層驗證問題

  • 了解並解決圖層驗證的錯誤

查看項目是否支援驗證

您可以將圖層連結到網站、Office 文件、純文字檔以及跨多個應用程式共用之專案中的檔案,不過,驗證流程不包含這些檔案。 對於連結至個別圖層之專案或組件的參考,如果這些圖層之間沒有任何相依性,則不會出現驗證錯誤。 除非程式碼使用這些參考,否則不會考量此類參考的相依性。

  1. 在分層圖上,選取一個或多個圖層,以滑鼠右鍵按一下選取範圍,然後按一下 [檢視連結]。

  2. 在 [圖層總管] 中,查看 [支援驗證] 資料行。 如果值為 false,則這個項目不支援驗證。

包含其他 .NET 組件和專案來進行驗證

當您拖曳項目到分層圖時,參考對應的 .NET 組件或專案會自動加入至模型專案的 [圖層參考] 資料夾。 這個資料夾包含組件的參考以及驗證期間分析的專案。 您也可以手動加入其他 .NET 組件和專案以進行驗證,而不用手動拖曳到分層圖。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下模型專案或 [圖層參考] 資料夾,然後按一下 [加入參考]。

  2. 在 [加入參考] 對話方塊中選取組件或專案,然後按一下 [確定]。

手動驗證程式碼

如果您有連結至方案項目的已開啟分層圖,您可以從圖表執行 [驗證] 捷徑命令。 您也可以使用命令提示字元執行 msbuild 命令,其中 /p:ValidateArchitecture 自訂屬性設定為 True。 例如,在您變更程式碼時定期執行圖層驗證,以便早期攔截相依性衝突。

若要從開啟的圖層圖表驗證程式碼

  1. 以滑鼠右鍵按一下圖表介面,然後按一下 [驗證架構]。

    注意事項注意事項

    根據預設,圖層圖表 (.layerdiagram) 檔案的 [建置動作] 屬性會設為 [驗證],以便在驗證程序中納入圖表。

    [錯誤清單] 視窗會報告發生的任何錯誤。 如需驗證錯誤的詳細資訊,請參閱了解並解決圖層驗證的錯誤。

  2. 若要檢視每個錯誤的來源,請按兩下 [錯誤清單] 視窗中的錯誤。

    注意事項注意事項

    Visual Studio 可能會顯示相依性圖形,而非錯誤來源。如果程式碼具有並非由圖層圖表所指定的組件相依性,或是程式碼遺失了圖層圖表所指定的相依性,則會出現此情況。請檢閱相依性圖形或程式碼,以判斷相依性是否應存在。如需相依性圖形的詳細資訊,請參閱 對應相依性圖形上整個程式碼的相依性

  3. 若要管理錯誤,請參閱管理驗證錯誤。

若要在命令提示字元驗證程式碼

  1. 開啟 Visual Studio 命令提示字元。

  2. 選擇下列其中一項:

    • 若要根據方案中的特定模型專案來驗證程式碼,請使用下列自訂屬性執行 MSBuild。

      msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
      

      -或-

      瀏覽至包含模型專案 (.modelproj) 檔案和圖層圖表的資料夾,然後使用下列自訂屬性執行 MSBuild:

      msbuild /p:ValidateArchitecture=true 
      
    • 若要根據方案中的所有模型專案來驗證程式碼,請使用下列自訂屬性執行 MSBuild:

      msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true 
      

      -或-

      瀏覽至方案資料夾 (其中必須包含圖層圖表所在的模型專案),然後使用下列自訂屬性執行 MSBuild:

      msbuild /p:ValidateArchitecture=true
      

    發生的任何錯誤都將列出。 如需 MSBuild的詳細資訊,請參閱 MSBuildMSBuild 工作

如需驗證錯誤的詳細資訊,請參閱了解並解決圖層驗證的錯誤。

管理驗證錯誤

在開發過程中,您可以隱藏驗證期間已報告過的某些衝突。 例如,您可能會想要隱藏已經處理的錯誤,或是與特定情節無關的錯誤。 當您隱藏錯誤時,最好在 Team Foundation 中記錄工作項目。

若要針對驗證錯誤建立工作項目

  • 在 [錯誤清單] 視窗中,以滑鼠右鍵按一下警告、指向 [建立工作項目],然後按一下您要建立的工作項目類型。

使用下列工作來管理 [錯誤清單] 視窗中的驗證錯誤:

轉換為

請依照下列步驟:

在驗證期間隱藏選取的錯誤

以滑鼠右鍵按一下一個或多個選取的錯誤、指向 [管理驗證錯誤],然後按一下 [隱藏錯誤]。

隱藏的錯誤會以刪除線的格式出現。 當您下一次執行驗證時,這些錯誤將不會出現。

隱藏的錯誤會在對應圖層圖表檔案的 .suppressions 檔案中追蹤。

停止隱藏選取的錯誤

以滑鼠右鍵按一下一個或多個選取的隱藏錯誤、指向 [管理驗證錯誤],然後按一下 [停止隱藏錯誤]。

選取的隱藏錯誤將會在下一次執行驗證時出現。

在 [錯誤清單] 視窗中還原所有隱藏的錯誤

以滑鼠右鍵按一下 [錯誤清單] 視窗中的任何位置、指向 [管理驗證錯誤],然後按一下 [顯示所有隱藏的錯誤]。

在 [錯誤清單] 視窗中隱藏所有隱藏的錯誤

以滑鼠右鍵按一下 [錯誤清單] 視窗中的任何位置、指向 [管理驗證錯誤],然後按一下 [隱藏所有隱藏的錯誤]。

自動驗證程式碼

您可以在每次執行本機組建時執行圖層驗證。 如果您的小組使用 Team Foundation Build,可以閘道簽入來執行圖層驗證,其中您可以藉由建立自訂 MSBuild 工作來指定,以及使用組建報告收集驗證錯誤。若要建立閘道簽入組建,請參閱使用閘道簽入建置流程來驗證變更

在本機組建執行期間自動驗證程式碼

  • 使用文字編輯器來開啟模型專案 (.modelproj) 檔案,然後加入下列屬性:
<ValidateArchitecture>true</ValidateArchitecture>

-或-

  1. 在 [方案總管] 中,以滑鼠右鍵按一下包含一個或多個圖層圖表的模型專案,然後按一下 [屬性]。

  2. 在 [屬性] 視窗中,將模型專案的 [驗證架構] 屬性設為 [True]。

    這會將模型專案納入驗證程序中。

  3. 在 [方案總管] 中,按一下要用於驗證作業的圖層圖表 (.layerdiagram) 檔案。

  4. 在 [屬性] 視窗中,確定圖表的 [建置動作] 屬性已設為 [驗證]。

    這會將圖層圖表納入驗證程序中。

若要處理 [錯誤清單] 視窗中的錯誤,請參閱管理驗證錯誤。

在 Team Foundation Build 執行期間自動驗證程式碼

  1. 在 [Team 總管] 中,按兩下組建定義,然後按一下 [處理序]。

  2. 在 [建置流程參數] 底下,展開 [編譯],然後在 [MSBuild 引數] 參數中輸入下列內容:

    /p:ValidateArchitecture=true

如需驗證錯誤的詳細資訊,請參閱了解並解決圖層驗證的錯誤。 如需 Team Foundation Build 的詳細資訊,請參閱:

疑難排解圖層驗證問題

下列表格描述圖層驗證的問題及其解決方式。 這些問題不同於因程式碼與設計衝突而導致的錯誤。 如需這些錯誤的詳細資訊,請參閱了解並解決圖層驗證的錯誤。

問題

可能的原因

解決方式

發生非預期的驗證錯誤。

若圖層圖表是從方案總管中的其他圖層圖表或是從相同模型專案中的圖層圖表複製來的,系統即不會對此圖層圖表進行驗證。 以這種方式複製的圖層圖表所包含的參考會與原始圖層圖表相同。

  1. 將新圖層圖表加入至模型專案。

  2. 將來源圖層圖表中的項目複製到新圖表。

了解並解決圖層驗證的錯誤

當您針對分層圖驗證程式碼時,如果程式碼設計發生衝突便會產生驗證錯誤。 例如,下列條件可能造成圖層驗證發生錯誤:

  • 成品指派給錯誤的圖層。 在此情況下,請移動成品。

  • 類別之類的成品以與架構發生衝突的方式使用另一個類別。 在此情況下,請重構程式碼以移除相依性。

若要解決這些錯誤,請更新程式碼直到驗證時不再出現錯誤為止。 您可以透過互動方式執行這項工作。

以下章節說明用於這些錯誤的語法,解釋這些錯誤的意義,並且建議解析或管理這些錯誤的作法。

語法

描述

ArtifactN(ArtifactTypeN)

ArtifactN 是與圖層圖表上的圖層相關聯的成品。

ArtifactTypeN 是 ArtifactN 的類型 (如 [類別] 或 [方法]),例如:

MySolution.MyProject.MyClass.MyMethod(Method)

NamespaceNameN

命名空間的名稱。

LayerNameN

圖層圖表上圖層的名稱。

DependencyType

Artifact1 與 Artifact2 之間的相依性關聯性類型。 例如,Artifact1 與 Artifact2 具有 [呼叫] 關聯性。

錯誤語法。

錯誤描述。

AV0001: 無效的相依性: Artifact1(ArtifactType1) --> Artifact2(ArtifactType2)

   圖層: LayerName1, LayerName2 | 相依性: DependencyType

因為 LayerName1 與 LayerName2 沒有直接相依性,所以 LayerName1 中的 Artifact1 不應該和 LayerName2 中的 Artifact2 有相依性。

AV1001: 無效的命名空間: Artifact

   圖層: LayerName | 必要的命名空間: NamespaceName1 | 目前的命名空間: NamespaceName2

LayerName 要求其相關成品必須屬於 NamespaceName1。 Artifact 位於 NamespaceName2,而非 NamespaceName1。

AV1002: 依存於禁止的命名空間: Artifact1(ArtifactType1) | Artifact2(ArtifactType2)

   圖層: LayerName | 禁止的命名空間: NamespaceName | 相依性: DependencyType

LayerName 要求其相關成品不得相依於 NamespaceName。 因為 Artifact2 在 NamespaceName 之中,因此 Artifact1 無法相依於 Artifact2。

AV1003: 在禁止的命名空間中: Artifact(ArtifactType)

   圖層: LayerName | 禁止的命名空間: NamespaceName

LayerName 要求其相關成品不能屬於 NamespaceName。 Artifact 屬於 NamespaceName。

AV3001: 遺漏連結 : 圖層 'LayerName' 連結至找不到的 'Artifact'。 您是否遺漏了組件參考?

LayerName 連結至找不到的成品。 例如,類別的連結可能因為模型專案遺漏包含該類別之組件的參考而遺失。

AV9001: 架構分析發現內部錯誤。 結果可能不完整。 如需詳細資訊,請參閱詳細建置事件記錄檔或輸出視窗。

如需詳細資訊,請參閱建置事件記錄檔或輸出視窗。

請參閱

概念

在開發期間驗證您的系統