使用FxCop工具分析_第1頁(yè)
使用FxCop工具分析_第2頁(yè)
使用FxCop工具分析_第3頁(yè)
使用FxCop工具分析_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、使用FxCop工具分析.NET托管代碼什么是FxCop?FxCop是一個(gè)代碼分析工具,它依照 微軟.NET框架的設(shè)計(jì)規(guī)范 對(duì)托管代碼 assembly(可 稱(chēng)為程序集,assembly實(shí)際上指的就是.net中的.exe或者.dll 文件(不包括netmodule文件),這種文件中包含四種信 息:assembly的清單 (包括引用外部的assembly、netmodule與資源文件及包含在同一文件中的 assembly);類(lèi)型描述信息,包 括版本信息與類(lèi)的描述等;MSIL微軟中間語(yǔ)言; 資源(圖標(biāo)等)進(jìn)行檢查。它使用基于規(guī)則的引擎,來(lái)檢查出你代碼中不合規(guī) 范的部分;你也可以定制自己的規(guī)則加入到這

2、個(gè)引擎。這個(gè)工具微軟免費(fèi)提供。 最新版需要.NET 2.0支持;止匕外,也有一個(gè) 較老的針對(duì).NET1.1的版本。最新版FxCop使用一項(xiàng)叫做內(nèi)窺(introspection ,或稱(chēng)內(nèi)觀、內(nèi)視)的技術(shù), 以窺探你的assembly內(nèi)部,而前一個(gè)版本則使用映 射(reflection ,或稱(chēng)反射) 技術(shù)。這一點(diǎn)值得關(guān)注,因?yàn)槭褂蒙弦粋€(gè)版本調(diào)試碰到問(wèn)題你不得不停下來(lái),對(duì)代碼作了任何更改之后都需要重新開(kāi)始調(diào)試;而這些對(duì)于新版本都沒(méi)有必要了。大多數(shù)代碼分析工具掃描你的源代碼,但是FxCop直接對(duì)你編譯好的代碼處理。.NET的每個(gè)assembly都有其metadata(可稱(chēng)為元數(shù)據(jù),metadata是關(guān)

3、于一 個(gè)assembly中各元素的類(lèi)型信息庫(kù),它本身也存放在這個(gè) assembly中),它對(duì) assembly以及assembly內(nèi)用到的所有類(lèi)型進(jìn)行描述。FxCop會(huì)使用這個(gè) metadata以獲知代碼內(nèi)部的運(yùn)行狀況。另外,它也對(duì)代碼編譯時(shí)生成的MSIL(Microsoft Intermediate Language , 微軟中間語(yǔ)言)進(jìn)行檢查。通過(guò)對(duì)metadata和MSIL檢查的結(jié)合,F(xiàn)xCop可以得出大量信息,以此獲得對(duì)代 碼執(zhí)行時(shí)所作所為的理解。它把你的代碼和各條規(guī)則逐一比較檢查,在每一個(gè)實(shí)例中,當(dāng)找到不符合規(guī)則的代碼時(shí)就生成一條消息。FxCop給出的消息的譯解下載并安裝之后FxCo

4、p就可以運(yùn)行了。FxCop采用單個(gè)Windows界面,該界面包 括如下三個(gè)面板區(qū)(當(dāng)你第一次打開(kāi)時(shí)):設(shè)置(Configuration )面板(左側(cè)):這個(gè)面板有兩個(gè)選項(xiàng)卡,分別標(biāo)為“目 標(biāo)” (Target)和“規(guī)則” (Rules),分別用來(lái)定 義所要分析的各個(gè)assembly 以及分析所用的規(guī)則。FxCop把所要分析的assemblies 資源(resources)、 命名域(namespace ,或者類(lèi)型(types)叫做目標(biāo)。這些規(guī)則則將應(yīng)用于 這 些目標(biāo)。消息(Message面板(右側(cè)):分析結(jié)果(由工具條上的“分析”按鈕啟動(dòng)) 將在消息面板中顯示。這些消息主要就是FxCop推薦的

5、對(duì)你的代碼/assembly進(jìn) 行改進(jìn)的信息列表。屬性(Properties )面板(屏幕底部):該面板有兩個(gè)選項(xiàng)卡,分別標(biāo)為“輸出”(Output)和“屬性” (Properties )。 “輸出”選項(xiàng)卡顯示根據(jù)規(guī)則得出的 信息、警告和錯(cuò)誤消息?!皩傩浴边x項(xiàng)卡則顯示所選中的 assembly命名域、 類(lèi)型、類(lèi)型成員、規(guī)則群、規(guī)則,或者消息的 詳細(xì)信息。消息面板是FxCop界面上最為重要的一個(gè)部分,因?yàn)槭撬o出了所要改進(jìn)的內(nèi)容 的信息??偠灾?,這就是你為什么首選 FxCop工具的原因。FxCop工具產(chǎn)生的消息包括以下五欄(你也可以在工具中增加或者刪除信息欄等級(jí)(Level ) : FxCop

6、為每個(gè)問(wèn)題的嚴(yán)重性指定一個(gè)等級(jí)。這些等級(jí)分別是嚴(yán)重錯(cuò)誤(Critical Error )、錯(cuò)誤(Error )、嚴(yán)重警告(Critical Warning)、 警告(Warning),以及信息(Informational )。嚴(yán)重錯(cuò)誤等級(jí)表明在大多數(shù)情 況下代碼不會(huì)正確執(zhí)行,因此尤其重要。信息等級(jí)則最無(wú)關(guān)緊要,因?yàn)樗鼉H僅對(duì)代碼歸納信息。修復(fù)類(lèi)別(Fix Category):這由FxCop賦給每一條消息??赡艿膬蓚€(gè)值是“打斷” (Breaking )(即,這個(gè)代碼問(wèn)題會(huì)打斷代碼執(zhí)行,代碼不會(huì)按照預(yù)想的方式運(yùn)行)和“不打斷” (Not Breaking )。確信度(Certainty ):確信度是

7、FxCop認(rèn)為的這個(gè)問(wèn)題確實(shí)是問(wèn)題的可能性百 分率。實(shí)際上,經(jīng)過(guò)你對(duì)有疑問(wèn)的代碼一番檢查分析之后,會(huì)發(fā)現(xiàn)有一些消息并不是什么問(wèn)題,因此FxCop給每一項(xiàng)消息分配了一個(gè)百分率,以讓你知道程序?qū)?這確實(shí)是個(gè)問(wèn)題的確信程度。規(guī)則(Rule):產(chǎn)生這個(gè)消息的規(guī)則名稱(chēng)。項(xiàng)目(Item):產(chǎn)生這個(gè)消息的目標(biāo)項(xiàng)目名稱(chēng)。如果要知道消息的更多信息,你可以雙擊它看完整消息。信息內(nèi)容包括:所違反 的規(guī)則詳情;和規(guī)則和沖突的詳細(xì)代碼;獲得更多信息的超鏈接(聯(lián)機(jī));以及 其它更多信息。一個(gè)例子:關(guān)于從FxCop能夠期望得到的好處假設(shè)你有一個(gè)簡(jiǎn)單的C#Windows應(yīng)用程序,它創(chuàng)建一個(gè)數(shù)組并顯示其內(nèi)容。W 單A顯示FxC

8、op將如何分析此應(yīng)用程序。 清單B的小片段是代碼assembly載入 FxCop之后所生成的消息之一。稍作分析之后發(fā)現(xiàn)這條嚴(yán)重等級(jí)信息并非對(duì)程序運(yùn)行威脅巨大,它不過(guò)是和把應(yīng)用程序的運(yùn)行結(jié)果滾動(dòng)顯出給用戶有關(guān)(Microsoft建議assembly應(yīng)該使用強(qiáng) 限定性的名稱(chēng)、且需要預(yù)先聲明)。這個(gè)例子過(guò)于簡(jiǎn)單,但是你可以自己下載這個(gè)應(yīng)用程序, 并通過(guò)使用獲得更好的 理解。FxCop另一個(gè)優(yōu)良特性是它允許你把消息保存為 XMLB式的報(bào)告文件。using System;using System.Drawing;using System.Collections;using System.Componen

9、tModel;using System.Windows.Forms;using System.Data;namespace CSharpArray public class Form1 : System.Windows.Forms.Form private System.Windows.Forms.Button button1;private System.ComponentModel.Container components = null;public Form1() protected override void Dispose( bool disposing ) if( disposin

10、g ) if (components != null) components.Dispose();base.Dispose( disposing );private void InitializeComponent() this.button1 = new System.Windows.Forms.Button。;this.SuspendLayout();this.buttonl.Location = new System.Drawing.Point(112, 88);this.button1.Name = "button1"this.button1.TabIndex =

11、0;this.button1.Text = "Test"this.button1.Click += new System.EventHandler(this.button1_Click);this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);this.ClientSize = new System.Drawing.Size(292, 273);this.Controls.Add(this.button1);this.Name = "Form1"this.Text = "Form1&quo

12、t;this.ResumeLayout(false);STAThreadstatic void Main() Application.Run(new Form1(); private void button1_Click(object sender, System.EventArgs e) int testArray = new int9;for (int i=0; i < 10; i+) testArrayi = i;for (int j=0; j < 10; j+) MessageBox.Show(testArrayj.ToString();Console.Write(test

13、Arrayj.ToString(); Level: CriticalFix Category: Non BreakingCertainty: 95Message: Sign 'CSharpArray' with a strong name key.Rule: Assemblies should have valid strong namesCategory: Microsoft.DesignCheck Id: CA2210Rule Description: Either the assembly has no strong name, an invalid one, or the strong name is valid only because of the computer configuration.The assembly should not be deployed in this state. The most commoncauses of this are: 1) The assembly's contents were modified after it was signed.2) The signin

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論