使用代碼克隆檢測功能查找重復代碼文內容
代碼克隆 是非常相似的代碼的單獨片段。 它們是在開發中在一段時間內的應用程序的一個常見現象。 ,因為您必須找到並更新多個片段,克隆使得難以更改您的應用程序。 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)
