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

article/2025/10/6 21:25:01

代码克隆是非常相似的独立代码片段。 在已开发一段时间的应用程序中,常会出现这种现象。 克隆提高了更改应用程序的难度,因为你必须找到并更新多个片段。

Visual Studio Ultimate 或 Visual Studio Premium 可帮助你查找代码克隆,以便你进行重构。

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

代码克隆分析器可用于在整个 Visual Studio 解决方案中搜索 Visual C# 和 Visual Basic 项目中的重复代码。

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

查找特定代码片段的克隆

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

    说明 说明

    你可以查找语句克隆,但不能查找字段、方法或属性签名等声明。

  2. 在片段的快捷菜单上,选择“在解决方案中查找匹配的克隆”

当你想知道解决方案中是否已存在相似的方法或片段时,请使用此方法。

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

  • “分析”菜单上,选择“分析解决方案是否有代码克隆”

当你审查代码时,此方法尤其有用。

说明 说明

此命令不会扫描长度少于 10 个语句的方法。

结果按相似性顺序呈现。 展开每个项可查看代码片段。

请注意,即使相似片段所使用的局部变量具有不同的名称,并且插入或删除了几个语句,也会被检测到。

比较克隆

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

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

此功能使用的比较工具与比较源代码管理下的版本所使用的工具相同。 如果要更改它,请从“工具”菜单中选择“选项” 展开“源代码管理”“Visual Studio Team Foundation Server” 选择“配置用户工具”,然后选择“添加”

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

  1. 向定义了要排除的方法的 Visual Studio 项目中添加新 XML 文件。

    该文件是否属于该项目并不重要。 它必须位于项目的顶层目录中。

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

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

    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 部分中指定了代码元素,则系统不会搜索该项目中定义的这些代码元素。

  • 生成的某些种类的代码:

    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. 如下更改文件内容:

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

文章出处:https://msdn.microsoft.com/zh-cn/library/hh205279(v=vs.120).aspx

http://chatgpt.dhexx.cn/article/4GZumtAA.shtml

相关文章

计算机上的查找替换功能快速格式化,Excel 2016中使用查找替换功能应用技巧

大家知道Excel中有查找和替换这个功能,懂得按住【Ctrl+F】可以直接打开“查找”对话框,按住【Ctrl+H】直接打开“替换”对话框。但你真的很了解这个功能了吗? 在使用Excel的时候,对于其中的查找功能的使用基本是比不可少的,那Excel中都可以在哪里进行查找呀。下面说下在Ex…

虚拟化、文件系统、查找文件

文章目录 虚拟化虚拟化的概念安装KVM安装gustos了解并配置KVM网络桥接&#xff1a;NAT:仅主机(hostonly): 文件系统了解文件系统的概念&#xff1a;了解硬链接的概念&#xff1a;挂载文件系统&#xff1a; 查找文件&#xff1a; 虚拟化 虚拟化的概念 虚拟化≠虚拟机 虚拟化里…

Duplicate Cleaner Pro(电脑重复文件清理软件)官方中文版V5.15.0 | 重复文件查找王下载

Duplicate Cleaner Pro 是一款相当出色的电脑重复文件清理软件&#xff0c;有重复文件查找王的美誉&#xff0c;支持字节、MD5以及其他多种哈希算法等内容比对方式&#xff0c;主要功能就是帮助大家从计算机硬盘中深入快速扫描查找并删除重复的文件、音乐、视频、照片、文档以及…

python删除重复文件

使用场景 网上爬取的图片重复量太大&#xff0c;需要删除重复图片。 环境 python 3 hashilib 分析一下这个问题&#xff1a; 首先&#xff0c;文件个数非常多&#xff0c;手工查找是不现实的&#xff0c;再说&#xff0c;单凭我们肉眼&#xff0c;在几千张图片或文件里面找…

工具及方法 - 使用Total Commander来查找重名文件

我只是一个Total Commander的轻度使用者&#xff0c;主要使用的是打开多个窗口&#xff0c;可以方便的以标签形式切换。 还有&#xff0c;这个软件是免费的&#xff0c;只是免费版打开时多一步&#xff0c;要输入个数字验证。 今天在使用一个SDK时&#xff0c;要包含进很多头文…

在群晖中批量删除重复文件

安装“存储空间分析器”套件配置“重复文件候选”报告&#xff0c;并生成报告查看并下载报告用excel打开报告并筛选出需要删除的文件 IF(A2A1,1,"")上传文件到群晖&#xff0c;并配置计划任务 cat 文件路径 | xargs -I {} rm -f "{}"执行并删除计划任务提醒…

在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法

Qidi 2020.12.12 0. 前言 看到很多人说在 QNAP NAS 上使用 fdupes 工具只能实现查找重复文件的效果&#xff0c;要删除文件只能对照生成的重复文件列表手动操作。这个说法其实是不对的&#xff0c;fdupes 完全支持自动去重功能。 以下正文说明了使用 fdupes 工具自动查找并删…

硬盘快满了,怎么办?查找重复文件

硬盘快满了&#xff0c;怎么办&#xff1f;查找重复文件&#xff0c;绿色版 链接&#xff1a;https://pan.baidu.com/s/1nbhRhninawNLK5CHZfanWA 提取码&#xff1a;yu37 序列号 TDFP-XWAL-EPNX-ALWN-LLLLLL 它非常易于使用&#xff0c;只需要选择资源&#xff08;驱动器&…

重复文件查找工具

电脑在经过长时间的使用后&#xff0c;会存在着大量重复的无用文件&#xff0c;这些文件会占用我们电脑中有限的磁盘空间&#xff0c;虽然现在我们的磁盘空间都是够大了&#xff0c;这些重复文件也许不算什么&#xff0c;但是它们会影响到系统的效能&#xff0c;并且我们还是要…

计算机一级查找同类型文件,如何快捷找出电脑内的重复文件

有时特喜欢收集各种软件和资料&#xff0c;但是时间久了&#xff0c;很多软件和资料之前下载过了&#xff0c;后来不记得了&#xff0c;又下载了&#xff0c;这样重复的非常多。这样重复的文件多了&#xff0c;占了大量的磁盘空间&#xff0c;也影响电脑运行性能&#xff0c;当…

怎么快速查找重复文件以及删除重复文件

多余的重复文件可能会浪费大量的硬盘存储空间&#xff0c;久而久之&#xff0c;电脑内存就会不够用&#xff0c;uplicate Finder and Remover for Mac是一款功能强大且操作简单的软件&#xff0c;如果您想要快速找出重复文件&#xff0c;节省磁盘空间&#xff0c;装机必备软件。…

mac电脑重复文件如何查找?

当我们的MAC电脑提示你磁盘空间已满时可以通过在Mac上删除不必要的重复文件,文件夹和类似照片,可以获得更多可用磁盘空间,Duplicate File Finder for Mac是一款功能强大的重复文件查找软件。Duplicate File Finder for Mac可处理图像,视频,音乐,文档,文件夹等等。它允许…

如何查找重复文件并快速删除,电脑查重复文件的方法

在日常使用电脑的过程中&#xff0c;我们要下载、编辑、保存文件&#xff0c;难免会出现一些重复文件&#xff0c;这些重复文件不仅会给工作带来不便&#xff0c;也会占用硬盘宝贵的空间。因此&#xff0c;经常查找与清理电脑中的重复文件就显得格外重要。如何查找重复文件并快…

jquery.orgchart.js 简单demo,自定义内容,自定义事件

orgchart简单demo GIT地址&#xff1a; https://github.com/Vlovely/orgchartDemo.git 预览图 代码示例 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><title>Organization Chart Plugin</title>&…

html 组织结构 图表,OrgChart-简单实用的组织结构图表jQuery插件

OrgChart是一款简单实用的组织结构图表jQuery插件。OrgChart通过DOM元素,jQuery和CSS3过渡效果来制作组织结构图表。可以使用本地数据,或通过ajax调用来完成数据的填充。 使用方法 使用OrgChart组织结构图表插件需要在页面中引入jquery.orgchart.css,jquery和html2canvas.js…

html5控件结构图,OrgChart组织架构图控件

插件描述:jQuery OrgChart 是一个用来绘制组织结构图的 jQuery 插件。 可以自己定加载自己想要的组织架构,通过json的形式 该插件为画组织架构图插件,通过OrgChart API定义的数据接口以json的数据形式将自己想要的组织架构数据传给orgChart,上手难度低,可扩展性比较高。 从…

使用vue-orgchart库来创建组织架构图

在这篇博客中&#xff0c;将详细介绍如何构建一个使用Vue.js和vue-orgchart的组织架构图Demo。Vue.js是一种构建用户界面的JavaScript框架&#xff0c;而vue-orgchart是一个基于Vue的组织结构图组件。本Demo将展示如何使用这两种技术来创建一个展示组织架构的可视化工具。 页面…

JQ插件OrgChart实现组织结构图

最近在做一个OA系统的组织结构图&#xff0c;需求如下。 第一眼看起来让人联想到脑图&#xff0c;思维导图大家都比较熟悉。但这不是脑图&#xff0c;是组织结构图。有添加&#xff0c;编辑&#xff0c;删除等功能… 随后我就找了一些插件&#xff1a; 1、jsMind&#xff08;…

使用OrgChart技术流程图(树状图)

基于OrgChart技术流程图[树状图] 一.实现效果图二.数据集三.实现思路1.创建数据封装函数2.将现有的数据处理成json数组3.调用closureProcessing()函数,将json数组变为json字符串4.初始化画布,并设置数据 四.源码1.HTML部分源码(即展示树状图用的画布容器)2.CSS部分的样式代码3.…

vue-orgchart 实现节点的增 删 改 功能

UI框架是 ant-design-vue 导出图片我是自己重新写的&#xff0c;要下载 html2canvas vue-orgchart 属性说明 在 这篇文章中https://blog.csdn.net/weixin_44164867/article/details/110871475 https://balkan.app/OrgChartJS-Demos/ 官网有好多例子可以使用 <template>…