轉(zhuǎn)帖|其它|編輯:郝浩|2011-01-24 16:03:54.000|閱讀 1144 次
概述:本文詳細(xì)介紹了FxCop的使用過(guò)程,并通過(guò)一個(gè)示例來(lái)進(jìn)行說(shuō)明。FxCop是對(duì)中間語(yǔ)言進(jìn)行檢測(cè)的,所以這里的代碼同樣適用于C#。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
FxCop介紹:
FxCop是一個(gè)代碼分析工具,它依照微軟.NET框架的設(shè)計(jì)規(guī)范對(duì)托管代碼assembly進(jìn)行檢查。它使用基于規(guī)則的引擎,來(lái)檢查出你代碼中不合規(guī)范的部分;你也可以定制自己的規(guī)則加入到這個(gè)引擎。
還有一款很流行的代碼檢測(cè)工具叫做StyleCop。之所以選擇使用FxCop有兩個(gè)原因,首先是StyleCop不支持VB.Net,而我們用 VB.Net做后臺(tái)開(kāi)發(fā)的。第二是FxCop有非常強(qiáng)大的定制規(guī)則引擎的能力,這方面的能力StyleCop不如FxCop。
FxCop使用:
1、下載FxCop
最新版本的是FxCop 10.0。我是使用FxCop 1.36版的。
2、安裝:略
3、運(yùn)行界面:
1)、打開(kāi)FxCop程序,單擊“Project”|“Add Targets”命令,添加待檢查的程序集,可添加多個(gè)。
2)、打開(kāi)FxCop程序,單擊“Project”|“Add Rules”命令,添加自定義的規(guī)則,可添加多個(gè)。
3)、單擊工具欄上的“Analyze”按鈕,F(xiàn)xCop將自動(dòng)執(zhí)行檢測(cè),檢測(cè)完畢后,結(jié)果將在右側(cè)的列表中顯示。單擊某個(gè)列表項(xiàng),F(xiàn)xCop下方將顯示該結(jié)果的詳細(xì)信息。如圖上圖所示。
這里使用的都是微軟自帶的規(guī)則,你還可以自定義規(guī)則,見(jiàn)下一節(jié)。
FxCop自定義引擎:
FxCop能實(shí)現(xiàn)自定義的引擎規(guī)則,這里我用個(gè)例子來(lái)說(shuō)明。例子是參數(shù)命名使用Camel命名規(guī)范,格式為:對(duì)象類型+對(duì)象描述。
1、用vs2008創(chuàng)建一個(gè) class library。fxcop還需要一個(gè)定義規(guī)則的XML文件。TypeName表示定義一規(guī)則的類名。Description表示錯(cuò)誤信息。將此xml定義成嵌入的資源。
<?xml version="1.0" encoding="utf-8"?>
<Rules FriendlyName="自定義規(guī)則">
<Rule TypeName="FunctionParametersCheck" Category="參數(shù)命名規(guī)范" CheckId="C10001">
<Name>參數(shù)命名請(qǐng)采用Camel命名規(guī)范</Name>
<Description>
參數(shù)命名請(qǐng)采用Camel命名規(guī)范,格式為:對(duì)象類型+對(duì)象描述。
</Description>
<Url>www.cnblogs.com/zhuqil</Url>
<Resolution>
函數(shù){0}的參數(shù){1}命名不符合Camel命名規(guī)范,格式為:對(duì)象類型+對(duì)象描述。
Integer int intQuantity
String str strFname
</Resolution>
<Email>zhuqi0@126.com</Email>
<MessageLevel Certainty="80">Warning</MessageLevel>
<FixCategories>NonBreaking</FixCategories>
<Owner>skylin</Owner>
</Rule>
</Rules>
2、在內(nèi)庫(kù)項(xiàng)目中引用Microsoft.Cci.dll和FxCopSdk.dll兩個(gè)dll文件。添加一個(gè)類FunctionParametersCheck。繼承BaseIntrospectionRule。
'功能: 參數(shù)命名請(qǐng)采用Camel命名規(guī)范
'創(chuàng)建人: 朱祁林
'創(chuàng)建時(shí)間:2010-12-07
'修改人: 朱祁林
'修改時(shí)間:2010-12-07
Imports Microsoft.FxCop.Sdk
Imports System
Namespace MySoftRules
Public Class FunctionParametersCheck
Inherits BaseIntrospectionRule
' Methods
Public Sub New()
MyBase.New("FunctionParametersCheck", "CustomRules.CustomXMLRules", GetType(FunctionParametersCheck).Assembly)
End Sub
Public Overrides Function Check(ByVal member As Member) As ProblemCollection
Dim method As Method = TryCast(member, Method)
If ((Not method Is Nothing) AndAlso (method.DeclaringMember Is Nothing)) Then
Dim i As Integer
For i = 0 To method.Parameters.Count - 1
'true:找到不符合規(guī)范的參數(shù),false表示沒(méi)有找到不符合規(guī)范的參數(shù)
Dim blnFoundAddString As Boolean = False
Dim strFullType As String = method.Parameters.Item(i).Type.FullName
Dim strType As String = strFullType.Substring((strFullType.LastIndexOf(".") + 1), ((strFullType.Length - strFullType.LastIndexOf(".")) - 1))
Dim strName As String = method.Parameters.Item(i).Name.Name
If strType.ToLower() = "string" Then
blnFoundAddString = CheckField(strName, "str")
ElseIf strType.ToLower() = "int32" Then
blnFoundAddString = CheckField(strName, "int")
End If
If blnFoundAddString Then
Dim resolu As Resolution = MyBase.GetResolution(method.ToString, strName)
MyBase.Problems.Add(New Problem(resolu))
End If
Next i
End If
Return MyBase.Problems
End Function
'檢查命名規(guī)范
Private Function CheckField(ByVal strName As String, ByVal strAbbreviation As String) As Boolean
Dim intLength As Integer = strAbbreviation.Length
Try
If (strName.Substring(0, intLength) <> strAbbreviation) Then
Return True
End If
If Char.IsLower(strName.Chars(strAbbreviation.Length)) Then
Return True
End If
Catch obj1 As Exception
Return True
End Try
Return False
End Function
End Class
End Namespace
從上面代碼可以看出,在類的構(gòu)造函數(shù)中,關(guān)聯(lián)了開(kāi)始定義的XML文件。為了簡(jiǎn)便起見(jiàn),這里只對(duì)string和int兩種類型說(shuō)明。
得到CustomRules.dll這個(gè)最終的輸出。
使用:有兩種方法使用。
1、使用fxcop工具,見(jiàn)前文
2、與vs2008集成,將這個(gè)dll放置到:VS2008安裝路徑\Microsoft Visual Studio 9.0\Team Tools\Static Analysis Tools\FxCop\Rules\目錄下。選擇一個(gè)項(xiàng)目,鼠標(biāo)右鍵點(diǎn)擊“運(yùn)行代碼分析”。
分析結(jié)果將顯示在”錯(cuò)誤列表”的”警告”標(biāo)簽頁(yè)中。雙擊其中一項(xiàng),即可定位到不符合規(guī)范的源代碼行,即可進(jìn)行代碼調(diào)整。
將不符合規(guī)范的代碼:
調(diào)整為:
調(diào)試:可以看到我們建立的是類庫(kù)項(xiàng)目,那么如何進(jìn)行調(diào)試來(lái)進(jìn)行開(kāi)發(fā)呢。
1、修改類庫(kù)項(xiàng)目的屬性,將啟動(dòng)外部程序改成安裝的FxcopCmd.exe:
2、將命令行參數(shù)修改成:out:"results.xml" /file:"C:\MyRules\TestProject\bin\Debug\TestProject.dll" /rule:"CustomRules.dll" /D:"C:\Program Files\Microsoft FxCop 1.36"
3、這樣就可以調(diào)試了。
總結(jié):本文詳細(xì)介紹了FxCop的使用過(guò)程,并通過(guò)一個(gè)示例來(lái)進(jìn)行說(shuō)明。FxCop是對(duì)中間語(yǔ)言進(jìn)行檢測(cè)的,所以這里的代碼同樣適用于C#。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載