基于Win10极简SonarQube C#代码质量分析

博客有些好些时间未更新了,这几个月的时间里,离开了实习的公司、大学毕了业、来了新公司、转了户口,有点忙,最近总算稍微闲下来了,打算重新拾起博客,坚持写下去。

言归正转,什么是SonarQube ?

 SonarQube(曾用名Sonar(声纳))是一个优秀的开源代码分析系统管理系统,支持超过25+种编程语言,对.Net Core当然也是支持的。

最近公司做的项目是用的Framework开发的,久仰SonarQube大名,今天在本地搭建SonarQube之后对项目进行分析,效果惊人。揪出了系统中潜藏的若干Bug,功不可没,所以在这里搭建的方法分享给大家,希望对大家有所帮助。

640?wx_fmt=png

在网上找一些资料,关于Sonar的介绍在Linux平台下较多,所以我下面的介绍主要是基于Win平台的,其他平台大同小异。

安装Sonar主要有以下几步:

安装JAVA SDK

Sonar是一款基于JAVA开发的工具,安装JAVA SDK的过程在此不再叙述,建议安装好之后配置好JAVA_HOME的环境变量,以下是下载地址。

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

 

安装SonarQube

首先到官网下载安装包,值得注意的是,该安装包是不分平台的,下载下来之后,选择Windows的文件夹中StartSonar.bat文件运行即可。

https://www.sonarqube.org/#downloads

640?wx_fmt=png

如果java环境安装正常,Sonar应该是能正常启动的,启动后浏览。启动效果如下:

640?wx_fmt=png

刚刚装好是英文的,我是安装了中文包,如何安装中文包,后面会叙述。

配置Sonar

我们需要对Sonar进行简单配置,使其能连接上MySQL数据库。

打开MySQL数据库,执行以下指令。

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
CREATE USER 'sonar' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;

该操作是为Sonar创建数据库并添加该数据库的用户,数据库名称是sonar ,用户名是sonar,密码是sonar。

640?wx_fmt=png

打开sonar.properties将内容替换成如下:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

其中sonar.jbc.url是mysql数据库的连接字符串。

重新启动Sonar(关闭运行startsonar.bat控制台,并在任务管理器中关闭所有和java有关的进程,重新运行startsonor.bat),使用管理员账户登录(admin/admin)。

登录之后,安装中文包,如下,安装之后需要点击重新启动,启动之后,Sonar就变成中文的了。

640?wx_fmt=jpeg

 

Sonar-Scanner for MSBuild安装与配置

下载并解压SonarQube Scanner for MSBuild,它是C# Framework的分析插件。

https://github.com/SonarSource/sonar-scanner-msbuild/releases/download/4.3.1.1372/sonar-scanner-msbuild-4.3.1.1372-net46.zip

解压之后,设置SonarQube Scanner for MSBuild的环境变量,如我的解压路径是:C:\MyWorkSpace\Tools\sonar-scanner-msbuild-4.3.1.1372-net46,则把该路径添加到path下:

640?wx_fmt=png

 

修改SonarQube.Analysis.xml文件

要修改的地方只是关于sonarQube服务器的一些配置,关于服务器URL、USER、PASSWORD等,修改如下:

640?wx_fmt=png

接下来,重要的一步,找到你电脑中的MSBuild.exe并添加到path环境变量,便于后面在命令行中调用MSBuild,我的是在vs 2017的安装目录下

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\amd64

640?wx_fmt=png

 

C# 项目分析

CMD进入C#项目所在的根目录,依此执行以下三条命令。

MSBuild.SonarQube.Runner.exe begin /k:"xxh.xzc.api" /n:"xhh.xzc.api" /v:"1.0"
MSBuild.exe /t:Rebuild
MSBuild.SonarQube.Runner.exe end

 

参数说明:

/key(简写k):对应projectKey即项目的唯一代码,如两套源代码使用同一个projectKey那扫描的结果将混在一起,所以一个项目需要有一个单独的projectKey

/name(简写n):对应projectName即项目的名称,为项目的一个显示的名称,建立使用完整的项目名称

/version(简写v):对应projectVersion即项目的版本,项目在不同的时期版本也是不一样的,如果方便,可以在sonarQube的服务器中查看到不同的版本代码其中问题的变化

三条命令分别是分析的前期准备,MSBuild编译,将报告上传给SonarQube。 

查看分析结果

640?wx_fmt=png

最后,进入http://localhost:9000/projects  查看分析结果吧,惊喜不惊喜?

界面中功能强大,很多认为绝对发现不了的Bug都展现出来了,还可以查看单元测试的覆盖率,相信如果坚持使用该工具,一定会对编码习惯有很大帮助。

快快搭建一个SonarQube看看自己的代码有没有BUG!! 

参考文献:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild

原文地址:https://www.cnblogs.com/CoderAyu/p/9416376.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大吉大利【牛客网】(牛客练习赛60)

传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 第一行一个整数n. 第二行n个整数ai. 输出描述: 一个整数表示上述求和式的答案. 示例1 输入 5 1 2 3 4 5输出…

【项目管理】git和码云的使用

缘起说了那么多关于git和码云相关的事,一直都没给大伙讲解这个码云究竟是个啥玩意儿。今天就给大伙说说如何通过git和码云搭建属于自己的代码库。码云码云(GitOSC)是开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台,不限制私有库和公有库数…

三角形周长和【牛客网】牛客网练习赛60

题目传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format:%lld 题目描述 输入描述: 输入描述 第一行一个整数表示n. 接下来n行每行两个整数x,y表示一个点. 输出描述: 输出一个整数表示周长…

AspNetCore 基于AOP实现Polly的使用

前言 说起AOP,其实我们在做MVC/API 的时候应该没少接触,比如说各种的Fitter 就是典型的AOP了。本来在使用Polly的时候我最初的打算是使用过滤器来实现的,后来发现实现起来相当的困难,利用NetCore的中间以及过滤器去实现一个AOP的…

.NET Core开发日志——配置

熟悉ASP.NET的开发者一定对web.config文件不陌生。在ASP.NET环境中,要想添加配置参数,一般也都会在此文件中操作。其中最常用的莫过于AppSettings与ConnectionStrings两项。而要在代码中获得文件中的配置信息,ConfigurationManager则是必不可…

操作集锦【牛客网】 牛客练习赛60

题目传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一款自走棋有26种操作,每种操作我们都用a,b,c,d,…,x,y,z的符号来代替. 现在牛牛有一个长度为nnn的操作序列,他现…

解决C# 7.2中的结构体性能问题

在某些使用了readonly关键字的情况下,C#编译器会创建出结构体的防御副本。虽然这个问题已经众所周知并被记录下来了,但仍然值得重新审视,因为它与C# 7.2的几个特性有关。in和ref readonly关键字的使用让这个问题出现得更频繁,而re…

使用ML.NET实现基于RFM模型的客户价值分析

RFM模型在众多的客户价值分析模型中,RFM模型是被广泛应用的,尤其在零售和企业服务领域堪称经典的分类手段。它的核心定义从基本的交易数据中来,借助恰当的聚类算法,反映出对客户较为直观的分类指示,对于没有数据分析和…

Reordering the Cows

牛客网传送 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format:%lld 链接:https://ac.nowcoder.com/acm/contest/4860/B 来源:牛客网 题目描述 Farmer John’s N cows (…

回顾4180天在腾讯使用C#的历程,开启新的征途

今天是2018年8月8日,已经和腾讯解除劳动关系,我的公司正式开始运营,虽然还有很多事情需要理清,公司官网也没有做,接下来什么事情都需要自己去完成了,需要一步一个脚印去完善,开启一个新的征途。…

稳定工作和创业之间的抉择

早上写的文章《回顾4180天在腾讯使用C#的历程,开启新的征途》是我在腾讯写的最后一篇对过往10年在腾讯使用C#语言的总结,今天收到反馈有人在造谣腾讯开始去.net,我被迫辞职了。这非常的不负责任,我必须写这篇文章来辟谣。要说腾讯…

牛客2020年愚人节比赛

欢乐的一晚上 题目链接 其实做做也挺好,脑筋急转弯,不需要算法不需要数据结构,纯娱乐 还有不知道是哪位哥的,心疼一下 题解 注:一下题解没必要较劲,欢乐局而已 对不对无所谓,换了最重要奥 A题ra…

IdentityServer4 知多少

1. 引言现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于IOS、Android的App,基于Windows系统的桌面应用和UWP应用等等,这么多种类的应用,就给应用的开发带来的挑战,…

牛客网【每日一题】4月2日 月月查华华的手机

牛客网链接 时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 月月和华华一起去吃饭了。期间华华有事出去了一会儿,没有带手机。月月出于人类最单纯的好奇心&#…

【二分】Best Cow Fences(poj 2018)

Best Cow Fences poj 2018 题目大意: 给出一个正整数数列,要你求平均数最大,长度不小于M的字串,结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽N⩽100,0001\leqslant N \leqslant 100,0001⩽…

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候,发现了一个号称专门针对离散实序列的变换,经分析总运算量为普通\(FFT\)的几乎一半,而且完全没有复数。这么强的吗?于是花了一个下午,去…

.NET Core 2.1中的分层编译(预览)

如果您是.NET性能的粉丝,最近有很多好消息,例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1,但我们还有更多的好消息。分层编译是一项重要的新特性功能,我们可以作为预览供任何人试用,从.NET Core 2.1开始。在我们测…

选择IT事业,意味着终身学习

八月,炎阳如火。 前几天书记找我交流,问我离职的原因,我跟他仔细的分析了一下我的职业发展规划和我对于未来的预期,书记也向我分析了一下他所认为的原因,他说,无外乎是三个原因:第一个是钱的问…

牛客网【每日一题】Shortest Path 4月3日题目精讲 DFS

题号 NC13886 Shortest Path 西南交通大学第十三届ACM决赛 题意: 一棵偶数节点的树,分成n/2对,两两一组,所有组的路径之和最小是多少? 题解: 如果两个点之间相连将另外两个相连的点覆盖,那么完全…

使用Jexus服务器运行Asp.Net Core2.0程序

前段时间写了篇关于.net core跨平台部署的文章。https://my.oschina.net/lichaoqiang/blog/1861977主要讲述了,利用NginxCentOSSupervisor.NetCore2.1,来运行.net core程序,感兴趣的朋友可以看一下。今天向大家介绍.net core使用jexus服务器的…