在VS中使用程式碼克隆檢測功能,查詢重複或相似的程式碼
使用程式碼克隆檢測功能查詢重複程式碼文內容
程式碼克隆 是非常相似的程式碼的單獨片段。 它們是在開發中在一段時間內的應用程式的一個常見現象。,因為您必須找到並更新多個片段,克隆使得難以更改您的應用程式。 Visual Studio可幫助您查詢程式碼克隆,以便您能重構它們。
可以找到特定片段的克隆,或者在解決方案中查詢所有克隆。 除了檢視直接複製外,克隆分析工具可以找到了變數和引數的名稱不同片段,以及某些語句重新排列了。
程式碼克隆分析器搜尋重複在visual C#和Visual Basic專案中程式碼在Visual Studio解決方案中。
查詢特定程式碼片段的複本
-
顯示程式碼片段在方法或get/set定義中的。
備註
可以找到語句克隆,但是,說明(如"欄位,方法也不是特性簽名。
-
在片段的快捷選單上,選擇 *** 在解決方案中查詢匹配的複本 ***。
請使用此方法,當您在您的解決方案若要了解是否具有類似的方法時或現有分段。
查詢在解決方案中的所有克隆
- 在 *** 分析 *** 選單中,選擇 *** 分析程式碼克隆的解決方案 ***。
在檢視您的程式碼時,此方法非常有用。
備註
小於10條語句是此命令長時間未發現的複本。
結果存在遵循相似的序列。 展開每個專案才能看到程式碼片段。
通知檢測的相似性,即使片段使用的區域性變數具有不同的名稱,因此,即使插入了幾個語句或已刪除。
比較克隆
-
在 *** 程式碼克隆結果 *** 視窗中,選擇兩個檔案或包含兩個檔案的克隆組。
-
從快捷選單中選擇 *** 比較 ***。
此函式使用比較工具與用於比較在原始碼管理的版本使用。 如果要更改,從 *** 工具 *** 選單中選擇 *** 選項 ***。 外接 *** 原始碼管理 *** 和 *** Visual Studio Team Foundation Server ***。 選擇 *** 配置使用者工具 *** 然後 *** 新增 ***。
從分析排除特定檔案或方法
-
新增新XML檔案讀入方法希望排除定義的Visual Studio專案。
不重要檔案是否是專案的一部分。 它必須在該專案的頂級目錄。
-
將副檔名更改為 .codeclonesettings
-
編輯檔案的內容,使其類似於以下示例。
XML<CodeCloneSettings> <Exclusions> <!-- Add any combination of the following node types. --> <!-- Absolute or relative path names: --> <File>MyFile.cs</File> <!-- Filepaths may contain wildcards: --> <File>GeneratedFiles\*.cs</File> <!-- Namespace, Type, and FunctionName must be fully qualified: --> <Namespace>MyCompany.MyProject</Namespace> <Type>MyCompany.MyProject.MyClass1</Type> <FunctionName>MyCompany.MyProject.MyClass2.MyMethod</FunctionName> <!-- Names may contain wildcards: --> <Namespace>*.AnotherProject</Namespace> <Type>*.AnotherClass*</Type> <FunctionName>MyProject.*.AnotherMethod</FunctionName> </Exclusions> </CodeCloneSettings>
哪些程式碼克隆將查詢?
程式碼克隆分析器將查詢“有驚無險”克隆。
程式碼通常克隆從複製程式碼隨後對此進行調整的開發人員的結果其新位置。 考慮可以設定的範圍更改以便更容易著手,該分析器未能找到克隆之前。 下列修改,可以設定,並克隆將被識別。 在每種情況下,具有特定數字的容差這樣的修改:
-
對重新命名識別符號。
-
插入和移除語句。
-
重新排列語句。
的副本將找不到?
-
型別宣告不進行比較。 例如,因此,如果您具有類似的兩選件類設定欄位宣告,則這些更改不會報告為克隆。
在方法和屬性定義的僅語句進行比較。
-
*** 分析程式碼克隆的解決方案 *** 將不會找到少於10個語句中早已的複本。
但是,您可以將 *** 在解決方案中查詢匹配的複本 *** 於較短的片段。
-
與超過40%已更改的標記的片段。
-
如果專案包含一 .codeclonesettings 檔案,該專案定義的程式碼元素不會搜尋,如果是在 .codeclonesettings 檔案的 Exclusions 部分名為。
-
生成的程式碼:
-
*.designer.cs, *.designer.vb
-
InitializeComponent 方法
但是,這不會自動應用於所有生成的程式碼。 例如,因此,如果使用文字模板,您可能希望將命名為排除生成的檔案在 .codeclonesettings 檔案。
-
何時使用程式碼克隆分析
查詢克隆在以下情況下是通常有用:
-
**當更新現有程式碼時。**在修復bug或響應需求時的更改,您通過查詢需要更改程式碼的位置通常啟動。 在進行更改之前,搜尋該程式碼段克隆。 如果發現克隆:
-
考慮是否需要對每個克隆進行相同的更改。
-
考慮是否是一個好機會重構克隆的程式碼新增到共享方法或選件類。
-
-
**體系結構清除。**在每次迭代結束時,請使用在 *** 分析 *** 選單的 *** 分析程式碼克隆的解決方案 ***。
-
**當您建立編碼。**在編寫新程式碼時,請使用工具來查詢已存在的類似的程式碼。
將克隆分析於大型基本程式碼
程式碼通常複製到較大型專案之間的不同部分且經常複製到組織的不同部分。 因此您應當看到克隆,當用一個基本程式碼,可以,而不僅僅是在工作的立即解決方案。
若要應用在您的源樹中的程式碼克隆分析器,請建立一個儲存庫中包含所有專案的解決方案。
提示
確保在多個解決方案可以包含專案。若要分析程式碼克隆的大量專案,可以建立包含所有專案的解決方案。不必從它們經常訪問的解決方案中移除專案。
生成的程式碼
程式碼分析克隆不適用於生成的程式碼一起使用。 例如:
-
從T4模板生成的程式碼。
有關 T4 的更多資訊,請參見:程式碼生成和 T4 文字模板。
-
從設計器生成的程式碼(如Silverlight或WPF使用者介面設計器。
從程式碼中排除T4模板生成的檔案中克隆分析
-
將模板在Visual Studio專案中的一個子目錄。 將其命名為,例如,GeneratedFiles。
-
新增一個新的文字檔案新增到專案,並將其名稱和副檔名。t4Exclusions.codeclonesettings
-
更改檔案的內容如下所示:
XML<CodeCloneSettings> <Exclusions> <File>GeneratedFiles\*.cs</File> </Exclusions> </CodeCloneSettings>
出處:https://docs.microsoft.com/zh-cn/previous-versions/hh205279(v=vs.110)