fxcop使用DataFlowRules規則集

2022-01-19 11:59:45 字數 2792 閱讀 6372

最近公司某專案佈署到生產環境後,發現其記憶體占用整體上只公升不降,疑遭記憶體洩漏,對程式的穩定執行帶來了極大的風險。

fxcop是微軟出的一款靜態**檢查工具,從1.36開始被vs整合,其獨立版本與vs版本的對應關係是:1.35對應vs2005,1.36對應vs2008,10對應vs2010。獨立版本有ui與命令列兩種使用方式,整合版本ui被vs整合,只有命令列可獨立使用。

靜態**檢查工具本質上是使用**檢查規則完成對**的檢查,fxcop也是如此。fxcop每個版本所包括的規則都略有不同,vs10整合版新增了乙個dataflowrules規則集,裡面包括一條ca2000,dispose objects before losing scope規則,在退出作用域前釋放可釋放的物件,而這也就是今天的主角。

軟體與規則集之間並不是隨意組合的。預設情況下某一版本的fxcop使用其自帶的規則。但是今天的情況有所不同,專案是08的,不方便轉成10版卻想使用10版的規則,且這個規則集無法被任何獨立版本的fxcop ui識別。在網上查了查,說是通過命今行可以識別,自己又嘗試了好久,終於成功,現在步驟記錄如下,使用的版本為vs10整合版。

2.安裝fxcop 10,執行,加入想要驗證的dll,暫時選中任1條規則,分析。這樣做的目的是可以跟據提示補齊檢查所需的各種dll,其路徑會被記錄到fxcop專案檔案中。如果直接使用命令列,如果缺失dll則無任何提示,可能會報錯終止分析,也可能能正常執行但檢查不出我想要的結果。補充dll時注意dll版本號。新舊dll可能不能相互替代。

3.補齊所有dll後,把所有預設規則都取消,儲存fxcop專案檔案。一般來講只能儲存到被檢查的dll的同級目錄。

<

rulefile

name

="$(fxcopdir)\rules\dataflowrules.dll"

enabled

="false"

allrulesenabled

="false"

>

<

rule

name

="dispose objects before losing scope"

enabled

="true"

/>

rulefile

>

如果你熟悉這個檔案,就會發現他的名字有點怪,其它規則集的規則的名稱是單詞大寫開頭且中間沒有空格,而這個特殊的規則集的規則則是首單詞首字母大寫且中間有空格。我只需要這個規則,而如果不指定規則名則會使用規則集內的所有規則。由於與其它常規名字風格不同,我找這個名字找了好久,最後通過vs找到了。開啟任一專案,在**分析裡單選此規則,然後儲存專案檔案,則在專案dll的同級目錄內會生成乙個"dll名.codeanalysislog.xml"檔案,裡面的rules/rule/name就記錄了選中的規則的實際名字。

5.使用win+r調出命令視窗,輸入cmd進入命令列並定位到「microsoft visual studio 10.0\team tools\static analysis tools\fxcop」,然後輸入命令:

fxcopcmd /p:zc.fxcop /o:w:\zc.xml

其中fxcopcmd是命令名,/p指定fxcop專案檔案路徑,/o指定結果輸出路徑。等待一兩分鐘後,命令列停止執行並重新出現輸入提示符,就可以去剛才指定的輸出路徑去檢視結果了。

6.結果檔案是乙個純xml檔案,並指定了渲染需要的xslt檔案。在c:\program files (x86)\microsoft visual studio 10.0\team tools\static analysis tools\fxcop\xml目錄內有個fxcopreport.xsl檔案,將其考到結果檔案的同級目錄,然後用記事本開啟結果檔案,在第二行將其指定的xslt路徑改為同級目錄。這樣只要同時拷貝這兩個檔案就可以隨時隨地檢視了。

以上就是整個操作過程。用一句話來表達,就是使用fxcop ui生成專案檔案,解決dll依賴,然後手工加入需要的規則,執行命令列得到結果,將xslt檔案拷貝到結果檔案同級目錄並更改結果檔案的xslt檔案指向,就可以隨地檢視了。下面還有幾點需要額外注意。

1.不管怎麼折騰,獨立版本的ui始終無法識別這個規則集,vs08整合ui也無法使用。

2.每個規則集都對應乙個dll,每個規則則對應乙個類。通過反編譯這些dll可以看到,dataflowrules規則集繼承的是另外一套類,網上稱為phoenix engine。要想成功使用它,就需要額外的一套操作類庫,我所知道的有「microsoft.visualstudio.codeanalysis.dataflowmodels.dll」,「microsoft.visualstudio.codeanalysis.phoenix.dll」,「microsoft.visualstudio.codeanalysis.phoenix.xml」,「phx.dll」,「runtime-vccrt-win-msil.dll」等。而獨立的fxcop預設是沒有這些dll的,理論上只要補充了這些dll,10獨立版本的命令列可以使用這個規則集。(這個本人已經驗證,可以使用)

3.1.35獨立對應.net 2.0,1.36獨立與vs08整合對應.net 3.5,10獨立與vs10整合對應.net 4.0,這個規則集被包括在vs10整合中。由於平台版本不一致,即使補充了這些dll,其它版本的命令列可能也無法使用這個規則集,包括1.35獨立,1.36獨立,vs08整合。

4.乙個**總結一下:

1.35獨立

1.36獨立

vs08整合

10獨立

vs10整合ui×

×××√

命令列×××

√√fxcop 使用data flow rules

is there a fxcop rule for local used idisposable's?

HLS for迴圈優化 dataflow 有疑問

有依賴關係,無法用合併。對於有依賴關係的資料流,可以使得一有輸出就執行,提高交疊率,降低了 latency,提高了資料吞吐率。資料流優化就是在三個迴圈之間插入 channel 可以是 ping pong ram fifo 或 register 通過配置資料流間的channel 選擇pp ram 或者...

SharpDevelop2 2與Fxcop的整合

sharpdevelop2.2與fxcop的整合 陳能技 2008 1 7 sharpdevelop2.2可以呼叫fxcop進行 分析。首先需要安裝fxcop,如果已經裝了vs.net 2005,則可在vs.net 2005的安裝目錄找到fxcop,例如 c program files micros...

FxCop的NamingRule之拼寫檢查不生效

本來用的是1.35版本,發現沒有進行拼寫檢查,公升級到1.36後依然不行,無奈反編譯其 終於發現了下邊這個 environment.getfolderpath environment.specialfolder.commonprogramfiles microsoft shared proof 對應...