﻿# 介紹好用工具：FxCop ( 靜態程式碼分析 )

[FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 是一種靜態程式碼分析工具，主要是用來分析採用 .NET 技術開發的組件(Assembly)品質，其中分析的規則也多達上百條（FxCop 1.36 預設有 197 種規則），並依照不同的領域分門別類，大致有以下類別：

-   [設計警告](http://msdn.microsoft.com/zh-tw/library/ms182125.aspx) ( Design Rules )  
    支援 .NET Framework 設計方針所指定之正確程式庫設計的警告。
-   [全球化警告](http://msdn.microsoft.com/zh-tw/library/ms182184.aspx) ( Globalization )  
    支援世界性程式庫和應用程式的警告。
-   [互通性警告](http://msdn.microsoft.com/zh-tw/library/ms182193.aspx) ( Interoperability )  
    支援與 COM 用戶端互動的警告。
-   [維護性警告](http://msdn.microsoft.com/zh-tw/library/ms182211.aspx) ( Maintainability )  
    維護性警告支援程式庫和應用程式維護。
-   [命名警告](http://msdn.microsoft.com/zh-tw/library/ms182232.aspx) ( Naming )  
    支援遵守 .NET Framework 設計方針之命名慣例的警告。
-   [效能警告](http://msdn.microsoft.com/zh-tw/library/ms182260.aspx) ( Performance )  
    支援高效能程式庫和應用程式的警告。
-   [可攜性警告](http://msdn.microsoft.com/zh-tw/library/ms182282.aspx) ( Portability )  
    可攜性警告會支援各種不同平台的可攜性。
-   [可靠性警告](http://msdn.microsoft.com/zh-tw/library/ms182287.aspx) ( Reliability )  
    支援程式庫和應用程式可靠性的警告，如正確的記憶體和執行緒用法。
-   [安全性警告](http://msdn.microsoft.com/zh-tw/library/ms182296.aspx) ( Security )  
    支援更安全之程式庫和應用程式的警告。
-   [用法警告](http://msdn.microsoft.com/zh-tw/library/ms182324.aspx) ( Usage )  
    支援適當使用 .NET Framework 的警告。

\[ 以上資訊摘自 MSDN [Managed 程式碼的程式碼分析警告](http://msdn.microsoft.com/zh-tw/library/ee1hzekz.aspx) 單元 \]

這些檢查規則(Rules)都是微軟在開發 .NET Class Library 時提出的各種程式設計的規範與警告，讓工程師們能夠寫出好用且易於維護的程式碼，[FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 原意是要提供給開發類別庫(Class Library)的開發人員用的，只不過若一般的 .Net 應用程式也能夠遵照這些 Rules 開發的話，想必也能夠獲益良多，我覺得任何 .NET 工程師應該都要試試 [FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 工具。

若要使用 [FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 有幾個基本的步驟，如下：

1\. 新增專案

![Microsoft FxCop - New Project](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d28bc7ad71e27d1a12d4-image_10.png)

2\. 新增檢查目標，並選擇一個至多個 .NET 組件

![Microsoft FxCop - Add Targets](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/67a3bf3311202caa0f87-image_15.png)

3\. 選擇要檢查的規則：在 [FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 中雖然 Rules 這麼多，但如果全部都套用的話也其實不太實際，你可以選擇部分檢查規則就好，只要切換到 Rules 頁籤後，勾選你想要檢查的類別或特定項目即可。

![Microsoft FxCop - Rules Tab](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/70ef82b4f6620cf76141-image_12.png)

4\. 按下 Analyze 按鈕進行程式碼檢查

![Microsoft FxCop - Targets - Begin Analysis](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/40ac243e5e939e2f0209-image_18.png)

5\. 最後就是查看報表了，你可以在右側的檢查項目上選取 Properties 查看警告的詳細

![Microsoft FxCop - Report](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/d4d2007ec6f7929cf9c2-image_23.png)

而在 Message Details 視窗裡有許多資訊可以查看，如下圖 Issues 頁籤可看到 Resolution (解決方式)

![Microsoft FxCop - Message Details - Issues](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6a440ce8c4d4b446e1c0-image_33.png)

Rule Details 提供了更詳細的說明

![Microsoft FxCop - Message Details - Rule Details](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f2781cccabfd61f55eba-image_30.png)

Message 頁籤提供該條警告偵測到的方法(Method)

 ![Microsoft FxCop - Message Details - Message](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/b197e022f698b8dc7a1c-image_42.png)

Rules Support 頁籤提供了該條規則所提供支援訊息，其中 URL 的連結會連到 MSDN 看到該規則詳細的說明，而且是**中文**的喔！

![Microsoft FxCop - Message Details - Rule Support](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/de1477e08d4f164cb3f6-image_45.png)

而最後的 Notes 可以讓 Code Review 的人員填入自己的筆記備查

![Microsoft FxCop - Message Details - Notes](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3eee8f49568aefd2a21f-image_48.png)

其他的部分就讓各位自己去發掘啦！

目前最新的 FxCop 是在 2008/8/13 發佈的 1.36 正式版，除此之外 [FxCop](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx) 工具也早已整合進 Visual Studio Team System 產品中，在這次的 Visual Studio 2008 SP1 更新中也包括 FxCop 1.36 的更新。

**備註：**如果你之前已經安裝了FxCop 1.36 Beta 2，在安裝FxCop 1.36之前需要先解除安裝 Beta 2 才能安裝正式版。

**相關連結**

-   [FxCop 1.36 Released!](https://learn.microsoft.com/en-us/archive/blogs/codeanalysis/fxcop-1-36-released)
-   [FxCop 1.36 发布](http://www.infoq.com/cn/news/2008/08/fxcop)
-   [Code Analysis Team Blog](https://learn.microsoft.com/en-us/archive/blogs/codeanalysis/)
-   [FxCop on MSDN](http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx)
-   [FxCop on Wikipedia](http://en.wikipedia.org/wiki/FxCop)
-   [FxCop on MSDN Code Gallery](https://web.archive.org/web/20080303001742/http://code.msdn.microsoft.com:80/codeanalysis) - Code Analysis
-   [FxCop v1.36 下載](https://learn.microsoft.com/en-us/visualstudio/code-quality/net-analyzers-faq) ( 2008/8/13 )
-   [FxCop: Policing Code Correctness](http://www.informit.com/articles/article.aspx?p=170717)
-   [MSDN TV: Code Correctness with FxCop](http://web.archive.org/web/20100108165600/http://www.microsoft.com/downloads/details.aspx?FamilyID=7855a3ed-071a-4584-877c-a6f0ce690f34&DisplayLang=en)
-   [Managed 程式碼的程式碼分析警告](http://msdn.microsoft.com/zh-tw/library/ee1hzekz.aspx)
-   MSDN Forum - Visual Studio Code Analysis and Code Metrics
