使用代码克隆检测功能查找重复代码

代码克隆 是非常相似的代码的单独片段。 它们是在开发中在一段时间内的应用程序的一个常见现象。 ,因为您必须找到并更新多个片段,克隆使得难以更改您的应用程序。 Visual Studio可帮助您查找代码克隆,以便您能重构它们。

可以找到特定片段的克隆,或者在解决方案中查找所有克隆。 除了查看直接复制外,克隆分析工具可以找到了变量和参数的名称不同片段,以及某些语句重新排列了。

代码克隆分析器搜索重复在visual C#和Visual Basic项目中代码在Visual Studio解决方案中。

高度匹配的代码克隆分析结果

查找特定代码片段的复本

  1. 显示代码片段在方法或get/set定义中的。

    备注

    可以找到语句克隆,但是,说明(如"字段,方法也不是特性签名。

  2. 在片段的快捷菜单上,选择 *** 在解决方案中查找匹配的复本 ***

请使用此方法,当您在您的解决方案若要了解是否具有类似的方法时或现有分段。

查找在解决方案中的所有克隆

  • *** 分析 *** 菜单中,选择 *** 分析代码克隆的解决方案 ***

在查看您的代码时,此方法非常有用。

备注

小于10条语句是此命令长时间未发现的复本。

结果存在遵循相似的序列。 展开每个项目才能看到代码片段。

通知检测的相似性,即使片段使用的局部变量具有不同的名称,因此,即使插入了几个语句或已删除。

比较克隆

  1. *** 代码克隆结果 *** 窗口中,选择两个文件或包含两个文件的克隆组。

  2. 从快捷菜单中选择 *** 比较 ***

此函数使用比较工具与用于比较在源代码管理的版本使用。 如果要更改,从 *** 工具 *** 菜单中选择 *** 选项 ***。 外接 *** 源代码管理 ****** Visual Studio Team Foundation Server ***。 选择 *** 配置用户工具 *** 然后 *** 添加 ***

从分析排除特定文件或方法

  1. 添加新XML文件读入方法希望排除定义的Visual Studio项目。

    不重要文件是否是项目的一部分。 它必须在该项目的顶级目录。

  2. 将文件扩展名更改为 .codeclonesettings

  3. 编辑文件的内容,使其类似于以下示例。

    <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>      
    

哪些代码克隆将查找?

代码克隆分析器将查找“有惊无险”克隆。

代码通常克隆从复制代码随后对此进行调整的开发人员的结果其新位置。 考虑可以设置的范围更改以便更容易着手,该分析器未能找到克隆之前。 下列修改,可以设置,并克隆将被识别。 在每种情况下,具有特定数字的容差这样的修改:

  • 对重命名标识符。

  • 插入和移除语句。

  • 重新排列语句。

Hh205279.collapse_all(zh-cn,VS.110).gif的副本将找不到?

  • 类型声明不进行比较。 例如,因此,如果您具有类似的两选件类设置字段声明,则这些更改不会报告为克隆。

    在方法和属性定义的仅语句进行比较。

  • *** 分析代码克隆的解决方案 *** 将不会找到少于10个语句中早已的复本。

    但是,您可以将 *** 在解决方案中查找匹配的复本 *** 于较短的片段。

  • 与超过40%已更改的标记的片段。

  • 如果项目包含一 .codeclonesettings 文件,该项目定义的代码元素不会搜索,如果是在 .codeclonesettings 文件的 Exclusions 部分名为。

  • 生成的代码:

    1. *.designer.cs, *.designer.vb

    2. InitializeComponent 方法

    但是,这不会自动应用于所有生成的代码。 例如,因此,如果使用文本模板,您可能希望将命名为排除生成的文件在 .codeclonesettings 文件。

何时使用代码克隆分析

查找克隆在以下情况下是通常有用:

  • **当更新现有代码时。**在修复bug或响应需求时的更改,您通过查找需要更改代码的位置通常启动。 在进行更改之前,搜索该代码段克隆。 如果发现克隆:

    1. 考虑是否需要对每个克隆进行相同的更改。

    2. 考虑是否是一个好机会重构克隆的代码添加到共享方法或选件类。

  • **体系结构清除。**在每次迭代结束时,请使用在 *** 分析 *** 菜单的 *** 分析代码克隆的解决方案 ***

  • **当您创建编码。**在编写新代码时,请使用工具来查找已存在的类似的代码。

将克隆分析于大型基本代码

代码通常复制到较大型项目之间的不同部分且经常复制到组织的不同部分。 因此您应当看到克隆,当用一个基本代码,可以,而不仅仅是在工作的立即解决方案。

若要应用在您的源树中的代码克隆分析器,请创建一个储存库中包含所有项目的解决方案。

提示

确保在多个解决方案可以包含项目。若要分析代码克隆的大量项目,可以创建包含所有项目的解决方案。不必从它们经常访问的解决方案中移除项目。

生成的代码

代码分析克隆不适用于生成的代码一起使用。 例如:

  • 从T4模板生成的代码。

    有关 T4 的更多信息,请参见 代码生成和 T4 文本模板

  • 从设计器生成的代码(如Silverlight或WPF用户界面设计器。

从代码中排除T4模板生成的文件中克隆分析

  1. 将模板在Visual Studio项目中的一个子目录。 将其命名为,例如,GeneratedFiles。

  2. 添加一个新的文本文件添加到项目,并将其名称和扩展名。t4Exclusions.codeclonesettings

  3. 更改文件的内容如下所示:

    <CodeCloneSettings>
      <Exclusions>
        <File>GeneratedFiles\*.cs</File>
      </Exclusions>
    </CodeCloneSettings>