当前位置: 首页 > news >正文

敏捷开发,持续集成 fxcop 在 CruiseControl.NET中的使用

续接上篇自动发布时配置文件的替换(http://blog.csdn.net/lu_yongchao/article/details/7173630),该篇主要记录fxcop在cc.net中的使用。

代码规范检测工具FxCop不能被CC.Net直接使用,我这里使用是Tasks中的ExecutableTask。

具体CruiseControl.NETConfig的配置方法如下:

<tasks>
			<!-- copy 修改过的sln文件-->
			<exec executable="E:\testspace\CCnetgroup\InfoManager\other\CoverSlnFile.bat" />
			<!-- 编译sln -->
			<msbuild>
				<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
				<workingDirectory>E:\testspace\CCnetgroup\InfoManager\code</workingDirectory>
				<projectFile>InfoManagerWeb.sln</projectFile>
				<buildArgs>/p:Configuration=Debug /v:diag</buildArgs>
				<timeout>900</timeout>
				<logger>d:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
				<targets>Rebuild</targets>
			</msbuild>
			<!-- 编译*.wdproj执行发布 -->
			<msbuild>
				<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
				<workingDirectory>E:\testspace\CCnetgroup\InfoManager\InfoManager_deploy</workingDirectory>
				<projectFile>InfoManagerWeb_deploy.wdproj</projectFile>
				<buildArgs>/p:Configuration=Debug /v:diag</buildArgs>
				<timeout>900</timeout>
				<logger>d:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
				<targets>Rebuild</targets>
			</msbuild>
			<!-- copy 配置文件 -->
			<exec executable="E:\testspace\CCnetgroup\InfoManager\other\82_config\confilecopy.bat" />

			<!--单元测试配置及NCover配置
			<nunit>
				<path>C:\Program Files (x86)\NUnit 2.6\bin\nunit-console.exe</path>
				<assemblies>
					<assembly>D:\QiuliangTest\src\CC.Test\bin\Debug\CC.Test.dll</assembly>
				</assemblies>
				<excludedCategories>
					<excludedCategory>LongRunning</excludedCategory>
				</excludedCategories>
				<outputfile>D:\QiuliangTest\DailyBuild\nunit\nunit-results.xml</outputfile>
			</nunit>
			<exec executable="D:\QiuliangTest\ncover.bat" />
			-->
			
			<!--FxCop配置,fxcop.bat的内容需要手工完成-->
			<exec executable="E:\testspace\CCnetgroup\InfoManager\other\fxcop\fxcop.bat" />
		</tasks>

其中fxcop.bat文件的内容如下:

"D:\Program Files\Microsoft Fxcop 10.0\FxCopCmd.exe" /project:E:\testspace\CCnetgroup\InfoManager\other\fxcop\default.FxCop /out:E:\testspace\CCnetgroup\InfoManager\other\fxcop\DailyBuild.FxCop.xml /q /gac

fxcop.bat文件中要注意两点:

1、"D:\Program Files\Microsoft Fxcop10.0\FxCopCmd.exe"必须添加双引号,。

2、.FxCop的文件生成如下(注意另存文件的时候路径最好是你要check的dll的同根目录下,我测试的时候它提示必须是相对路径访问,因此不能扩磁盘另存):

FxCop的介绍我copy了一段百度知道如下:

FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的assembly、 netmodule与资源文件及包含在同一文件中的assembly);类型描述信息,包括版本信息与类的描述等;MSIL微软中间语言;资源(图标等))进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。这个工具微软免费提供。最新版需要.NET 2.0支持;此外,也有一个较老的针对.NET1.1的版本。

  最新版FxCop使用一项叫做内窥(introspection,或称内观、内视)的技术,以窥探你的assembly内部,而前一个版本则使用映射(reflection,或称反射)技术。这一点值得关注,因为使用上一个版本调试碰到问题你不得不停下来,对代码作了任何更改之后都需要重新开始调试;而这些对于新版本都没有必要了。

  大多数代码分析工具扫描你的源代码,但是FxCop直接对你编译好的代码处理。.NET的每个 assembly都有其metadata(可称为元数据,metadata是关于一个assembly中各元素的类型信息库,它本身也存放在这个 assembly中),它对assembly以及assembly内用到的所有类型进行描述。FxCop会使用这个metadata以获知代码内部的运行状况。另外,它也对代码编译时生成的MSIL(Microsoft Intermediate Language,微软中间语言)进行检查。

  通过对metadata和MSIL检查的结合,FxCop可以得出大量信息,以此获得对代码执行时所作所为的理解。它把你的代码和各条规则逐一比较检查,在每一个实例中,当找到不符合规则的代码时就生成一条消息。


next step:自动发布的时候版本的备份等操作的学习,敬请关注,谢谢。


相关文章:

  • 前++和后++的实现
  • 函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
  • __declspec关键字详细用法
  • 关于C#间接继承的一些思考:如何修改继承函数的返回值类型
  • 谈谈小弟最近暗自干些什么勾当(LGame WP版开发进度汇报)
  • VC++多线程编程
  • 恐怖绝伦,SOPA和PIPA捅了网站窝!
  • 过年收拾旧货,散点Java游戏源码
  • 面向概念编程浅谈:最大限度的UI代码共用
  • C#实现字符串相似度比较[Levenshtein Distance算法]
  • windows下编译boost库
  • 创建和使用动态链接库
  • boost.python的基本使用方法
  • swig+python的用法
  • Lua For Windows 环境配置及使sciTE支持中文
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「译」Node.js Streams 基础
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Akka系列(七):Actor持久化之Akka persistence
  • HTTP中的ETag在移动客户端的应用
  • JavaScript 奇技淫巧
  • Kibana配置logstash,报表一体化
  • SQLServer之索引简介
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 百度小程序遇到的问题
  • 对JS继承的一点思考
  • 工程优化暨babel升级小记
  • 基于游标的分页接口实现
  • 浅谈web中前端模板引擎的使用
  • 深入浅出webpack学习(1)--核心概念
  • 数据仓库的几种建模方法
  • 我的zsh配置, 2019最新方案
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 应用生命周期终极 DevOps 工具包
  • C# - 为值类型重定义相等性
  • postgresql行列转换函数
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (16)Reactor的测试——响应式Spring的道法术器
  • (4)logging(日志模块)
  • (Note)C++中的继承方式
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (论文阅读11/100)Fast R-CNN
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (转)大型网站的系统架构
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .apk文件,IIS不支持下载解决
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net CHARTING图表控件下载地址
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost