.NET静态代码检查工具StyleCop的安装与使用

2023-11-01

最近需要做一个C#项目的代码走查,其中的一项内容就是要用代码的静态分析工具对代码进行检测,我的想法是使用VisualStudio自带的Microsoft托管建议规则外加StyleCop工具检测问题(主要是警告),再对这些问题逐一分析。

我使用的VisualStudio版本为2012,Windows版本为Win7旗舰版。一般来说,编译C#代码时VS都会按照Microsoft托管建议规则给出编译报错和警告信息,并支持用户自己配置个性化的ruleset。对于每一个配置项,都可以在MSDN上找到详细的说明文档,地址如下:

https://msdn.microsoft.com/zh-cn/library/ee1hzekz.aspx

(这些规则专注于代码中最关键的问题,包括潜在的安全漏洞、应用程序崩溃和其他重要的逻辑和设计错误。您应在为项目创建的任何自定义规则集中包含此规则集,规则的ruleset文件地址在VS安装目录下的\Team Tools\Static Analysis Tools\Rule Sets\MinimumRecommendedRules.ruleset)

StyleCop支持了另外一个思路的规则,即代码的书写风格。

StyleCop下载地址:http://stylecop.codeplex.com/

我下载的StyleCop版本为4.7.54.0,安装包名为StyleCop-4.7.54.0.msi

第一步,欢迎界面

第二步,授权协议(Microsoft Public License,详见附文)

第三步,自定义安装,其中Visual Studio integration支持VS2008、2010、2012、2013

第四步,确定安装

第五步,读条界面(时间还是比较长的)

第六步,安装完毕

安装完毕后,打开VisualStudio,在程序集上单击鼠标右键,就可以看到多出的三个选项了。

Run StyleCop、Run StyleCop(Rescan All)可用于运行StyleCop做代码检查

StyleCop Settings可设定StyleCop的代码检查规则,设定界面如下:

检查规则设置完毕后,可在程序集所在目录下看到Settings.StyleCop文件,该文件保存了这些检查规则,并可用于下次检查,或复制到其他程序集下,让其他程序集的代码检查也应用这一规则。每次检查后的结果存储在文件StyleCop.Cache里。

StyleCop对C#语言的检查项大致分为以下几类:

-Documentation Rules 文档化注释规则
  -Element Documentaion 变量的文档化注释
  -File Headers 文件头部
-Layout Rules 布局规则
  -Curly Brackets 花括号位置
  -Line Spacing 行距
-Maintainability Rules 稳定性规则
  -Access Modifier 访问修饰符
  -Dubug Test 调试信息
  -File Contents 文件内容
  -Parenthesis 圆括号
  -Removable Code 可移除的代码
  -Naming Rules 标识符命名规则
  -Ordering Rules 排序规则
  -Element Order 变量顺序
  -Using Directives 命名空间引用顺序(Using指令)
-Readability Rules 可读性规则
  -Comments 注释
  -Member Access 成员访问
  -Method Parameter Placement 变量位置
  -Query Expressions 查询表达式
  -Regions Regions区域
  -Statements 声明
  -Strings 字符串
  -Types 类型
-Spacing Rules 空格规则

附:Microsoft Public License全文

Microsoft Public License (Ms-PL)
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
1. Definitions
The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the same meaning here as under U.S. copyright law.
A “contribution” is the original software or any additions or changes to the software.
A “contributor” is any person that distributes its contribution under this license.
“Licensed patents” are a contributor’s patent claims that read directly on its contribution.
2. Grant of Rights
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
3. Conditions and Limitations
(A) No Trademark License- This license does not grant you rights to use any contributors’ name, logo, or trademarks.
(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.
(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.
(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
(E) The software is licensed “as-is.” You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.

转载于:https://my.oschina.net/Tsybius2014/blog/741247

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET静态代码检查工具StyleCop的安装与使用 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 基于python+flask实现视频数据可视化

    使用爬虫对视频弹幕进行爬取并保存为csv文件 导入数据库中 进而实现前后端交互功能 数据集中包含的数据分别为爬取的热门视频的标题 播放量 弹幕量 收藏量 综合得分以及视频的类别等信息 便于后续我们进行数据分析 我们使用数据库中的数据评出综合
  • 任务分配的穷举法、匈牙利法、分支定界法

    1 必做 任务分配问题 设有 4 项任务 B1 B2 B3 B4 派 4 个人 A1 A2 A3 A4 去完成 每个人都可以承担 4 项任务中的任何一项 但所消耗的资金不同 设 Ai 完成 Bj 所需资金为 问如何分配任务 使总费用最少 假
  • 无缝漫游的过程!

    无缝漫游中无线AP的配置与普通无线AP的配置基本相同 只是应当注意以下几个方面的问题 所有无线AP必须使用同一SSID 所有无线AP必须使用同一网段的IP地址 并且处于同一VLAN中 信号相互覆盖的无线AP不能使用相同的频道 由于多个AP信
  • 图形分析之Nsight的使用

    作者 i dovelemon 日期 2017 06 11 来源 CSDN 主题 Nsight OpenGL 引言 最开始的时候 我进行图形编程使用的是DX 所以那时候进行图形分析的时候 基本都是使用PIX 后来转向了OpenGL 分析的时候
  • JVM-17(垃圾回收器)上

    目录 17 1 GC分类与性能指标 17 1 1 JVM的发展 17 1 2评估GC的性能指标 17 2 不同的垃圾回收器概述 17 3 Serial回收器 串行回收 17 4 ParNew回收器 并行回收 17 5 Parallel回收器
  • html超链接打开共享文件夹,教你如何访问共享文件夹

    现在我们往往要讲究 资源共享 就是有好的东西跟大家一起分享 那么到电脑上呢经常有一些文件夹 有的是加密的 有的是共享的 今天呢小编就要给大家讲讲如何访问这些共享文件夹 要想查看共享文件夹其实也是有步骤可言的 首先 要先打开控制面板 有一个W
  • 电脑开机就显示360服务器,我用360给电脑杀毒,一直到开机启动项会停止,显示“扫面服务意外终止,无法继续扫描,这可能是由于程序...

    希望我的回答可以帮助楼主解决问题哦 这个问题很明显是杀毒软件自身的问题 不太知道诺顿这款杀毒软件 是不是在升级过程中发生什么问题造成的 楼主可以尝试换用腾讯电脑管家 这款杀毒软件在病毒以及木马的查杀方面很权威 很成熟 下面是我总结的电脑容易
  • ZGC收集器介绍

    ZGC收集器 XX UseZGC ZGC是一款JDK 11中新加入的具有实验性质的低延迟垃圾收集器 ZGC可以说源自于是Azul System公司开发的C4 Concurrent Continuously Compacting Collec
  • OK6410矩阵键盘驱动问题解决方案

    在嵌入式系统开发中 矩阵键盘是一种常见的输入设备 OK6410是一款广泛使用的ARM开发板 本文将介绍如何在OK6410开发板上实现矩阵键盘的驱动 硬件连接 首先 我们需要将矩阵键盘与OK6410开发板进行连接 矩阵键盘通常由多个行和列组成
  • ResNet到底在解决一个什么问题呢?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 来源 知乎 https www zhihu com question 64494691 文仅交流 侵删 ResNet发布于2015年 目前仍有大量CV任务用其作为back
  • C# 代码转化为Java代码

    http www tangiblesoftwaresolutions com Free Editions html Install Instant C converts VB NET code to C Install Instant VB
  • 史上最全midjourney关键词

    最全midjourney关键词 篇幅太长 文章最后有可编辑版本获取链接 增强图片真实感 清晰度 unreal engine 虚幻引擎 ultra realistic 超真实 photography 摄影图片 detailed 细节 4K 4
  • LaTeX 使用笔记——公式篇

    目录 一 行内公式 二 独立公式 一 行内公式 二 独立公式 一 括号 1 当括号的两边分别位于上下两行公式 且可能出现两个括号大小不一致的情况 例如 使用LaTeX代码 begin aligned dot V k v 1 z k v 1
  • 一次性搞清楚unicode、codepoint、代码点、UTF

    最近在处理字符过滤 重新研究了下字符 unicode和代码点的相关知识 首先要说一下编码的基本知识unicode unicode unicode是计算机科学领域里的一项业界标准 包括字符集 编码方案等 计算机采用八比特一个字节 一个字节最大
  • Python 爬虫获取某贴吧所有成员用户名

    最近想用Python爬虫搞搞百度贴吧的操作 所以我得把原来申请的小号找出来用 有一个小号我忘了具体ID 只记得其中几个字母以及某个加入的贴吧 所以今天就用爬虫来获取C语言贴吧的所有成员 计划很简单 爬百度贴吧的会员页面 把结果存到MySQL
  • FreeMarker模板使用方法讲解

    项目需要 刚接触 正在学习 FreeMarker简介 FreeMarker模板文件主要由如下4个部分组成 1 文本 直接输出的部分 2 注释 lt gt 格式部分 不会输出 3 插值 即 或 格式的部分 将使用数据模型中的部分替代输出 4
  • 深度学习之基于CNN实现汉字版手写数字识别(Chinese-Mnist)

    Mnist数据集是深度学习入门的数据集 昨天发现了Chinese Mnist数据集 与Mnist数据集类似 只不过是汉字数字 例如 一 二 三 等 本次实验利用自己搭建的CNN网络实现Chinese版的手写数字识别 1 导入库 import
  • C++疑难杂症 error LNK2001: 无法解析的外部符号

    问题简述 error LNK2001 无法解析的外部符号 private static int ETH m age m age ETH 0HA 这类问题是我们在编译过程很常见 原因我百度的时候发现也分好几种 有可能是没有包含相应的头文件 也
  • vue 用axios请求接口的使用以及配置

    若依框架前后端分离 用axios请求接口的使用以及配置 首先需要下载安装 cnpm install axios save 安装完成以后进行配置 打开main js import axios from axios Vue prototype
  • .NET静态代码检查工具StyleCop的安装与使用

    最近需要做一个C 项目的代码走查 其中的一项内容就是要用代码的静态分析工具对代码进行检测 我的想法是使用VisualStudio自带的Microsoft托管建议规则外加StyleCop工具检测问题 主要是警告 再对这些问题逐一分析 我使用的