﻿# 介紹好用工具：PowerCommands for Reflector [含使用教學]

我想家喻戶曉的 [.NET Reflector](http://www.red-gate.com/products/reflector/) 工具應該不用我多做介紹，但昨天無意間發現一個不錯的 [Reflector](http://www.red-gate.com/products/reflector/) 外掛工具叫做 PowerCommands for Reflector，當安裝完成後會多出將近 20 個貼心小功能 (陸續增加中…)，讓你在使用[Reflector](http://www.red-gate.com/products/reflector/) 的時候多出一些功能選項協助你瀏覽 .NET 組件。

**如何安裝 PowerCommands for Reflector ( 共 4 個步驟 )**

1\. 先進入下載專區下載最新版程式 ( 有區分 x86 與 x64 架構 )

    ![1\. 先進入 PowerCommands for Reflector 下載專區下載最新版程式 ( 有區分 x86 與 x64 架構 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/18925718cdc2de1633f9-image.png "1. 先進入 PowerCommands for Reflector 下載專區下載最新版程式 ( 有區分 x86 與 x64 架構 )")

2\. 解壓縮下載的檔案至 [Reflector](http://www.red-gate.com/products/reflector/) 安裝目錄  
    備註: [Reflector](http://www.red-gate.com/products/reflector/) 為綠色軟體，你只要將檔案解壓縮至 [Reflector](http://www.red-gate.com/products/reflector/) 所在目錄即可

    ![2\. 解壓縮下載的檔案至 Reflector 安裝目錄](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6e48060b49371d57e808-image.png "2. 解壓縮下載的檔案至 Reflector 安裝目錄")

3\. 開啟 [.NET Reflector](http://www.red-gate.com/products/reflector/) 並點選 \[View\] / \[Add-Ins…\] 選單

![3\. 開啟 .NET Reflector 並點選 \[View\] / \[Add-Ins…\] 選單](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/6499e3eff7836c4161da-image.png "3. 開啟 .NET Reflector 並點選 [View] / [Add-Ins…] 選單")

4\. 將 Reflector.PowerCommands.dll 組件新增到 Add-Ins 清單中

![4\. 將 Reflector.PowerCommands.dll 組間新增到 Add-Ins 清單中](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a5d5ab88d93a1f0f98ec-image.png "4. 將 Reflector.PowerCommands.dll 組間新增到 Add-Ins 清單中")

**如何使用 PowerCommands for Reflector**

PowerCommands for Reflector 外掛程式將所有功能打散在 [Reflector](http://www.red-gate.com/products/reflector/) 工具的每一個角落，所以你沒辦法在同一個地方使用所有功能，以下我用不同區域做分類解釋各功能：

**\[ 主選單區 \]**

**1\. Open Zip ( 直接開啟 ZIP 壓縮檔內的 .NET 組件 )**

開啟時會自動由 PowerCommands for Reflector 解壓縮組件至 \[我的文件\] 目錄下的 Reflector\\Unzipped 目錄下，此功能只是方便你不用先執行解壓縮動作而已。

![Red Gate's .NET Reflector :: Open Zip](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/8437ed4b555b8751b783-image.png "Red Gate's .NET Reflector :: Open Zip")

**2\. Assembly List Import/Export ( 匯入/匯出組件清單 )**

當你有多個 **組件清單**(Assembly List) 時，你可以將這些清單匯出儲存起來，並將匯出的 XML 檔帶到其他台電腦後匯入，跟團隊其他成員分享不同的組件清單。

另外我也順帶講一下 **組件清單**(Assembly List) 的使用教學：

先建立組件清單名稱

![Red Gate's .NET Reflector :: Open List](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ae14752e1ca9ace33856-image.png "Red Gate's .NET Reflector :: Open List") [![Red Gate's .NET Reflector :: Open List :: Add New List](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1e06a403282580afb0b9-image_thumb.png "Red Gate's .NET Reflector :: Open List :: Add New List")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e5163a8f0ec85c0fe924-image.png)

選取後會開始另一組組件清單並讓你設定另一批組件

![Red Gate's .NET Reflector :: Start 'New List 1' Assembly List](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c4f1998078dc2a8feef5-image.png "Red Gate's .NET Reflector :: Start 'New List 1' Assembly List")

日後你可以直接用 \[File\] / \[Open List\] 載入不同專案的組件清單。

而透過 Assembly List Import/Export 的功能就可以讓你匯出整份**組件清單**，並且可隨時匯入組件清單到其他電腦，匯入後可利用 \[File\] / \[Open List\]  (或用快速鍵 **Ctrl + L** ) 載入被匯入的組件清單。

![Red Gate's .NET Reflector :: \[Tools\] / \[Import/Export Assembly List\] / \[Export\]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fe0c1092c9700b90c6f4-image.png "Red Gate's .NET Reflector :: [Tools] / [Import/Export Assembly List] / [Export]")

以下是匯出時的畫面

[![Red Gate's .NET Reflector :: \[Tools\] / \[Import/Export Assembly List\]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/df6e189d391b564f0945-image_thumb.png "Red Gate's .NET Reflector :: [Tools] / [Import/Export Assembly List]")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/4bb7bc893735a6d47695-image.png)

**3\. Reorder Assemblies ( 重新排序組件列表 )**

將目前的組件清單以命名空間的字母順序進行排序。此功能除了出現在主選單外，也會出現在組件列表的滑鼠右鍵選單中。

**4\. **Collapse All** ( 收起所有組件列表的開啟狀態 )**

將所有樹狀結構中已開啟的項目全部收合起來。此功能除了出現在主選單外，也會出現在組件列表的滑鼠右鍵選單中。

![Red Gate's .NET Reflector :: Reorder Assemblies](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/39c8d5f66df305089ed5-image.png "Red Gate's .NET Reflector :: Reorder Assemblies")

**5\. Bookmarks Menu ( 書籤選單 )**

書籤功能其實是 [Reflector](http://www.red-gate.com/products/reflector/) 內建的功能，在選取到你想要的組件、類別或成員後按下 Ctrl + K 即可建立書籤，下次開啟 [Reflector](http://www.red-gate.com/products/reflector/) 時就可以直接透過書籤跳到那個位置，但沒安裝 PowerCommands for Reflector 之前你必須按下 F2 開啟書籤視窗後才能選取書籤，安裝 PowerCommands for Reflector 後就可以直接透過主選單選取書籤，操作上的確比較方便。

![Red Gate's .NET Reflector :: Bookmarks Menu](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/bde0a043d43186580643-image.png "Red Gate's .NET Reflector :: Bookmarks Menu")

**\[ 命名空間層級’s 滑鼠右鍵選單區 \]**

![\[ 命名空間層級’s 滑鼠右鍵選單區 \]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fb558bcc9b325113cc3e-image.png "[ 命名空間層級’s 滑鼠右鍵選單區 ]")

**6\. Create Assembly Binding Redirect ( 建立組件繫結重新導向 )**

[組件繫結重新導向](http://msdn.microsoft.com/zh-tw/library/2fc472t2.aspx)功能在實務上不是很常用到，但需要的人就可以利用這個功能幫你建立[組件繫結重新導向](http://msdn.microsoft.com/zh-tw/library/2fc472t2.aspx)的 XML 定義，其實算是個貼心的小工具。

假設你選取 **System.Web, Version 2.0.0.0** 這個組件並點選 \[Create Binding Redirect\] 選項，這時會出現 Versions 對話框，當你希望應用程式可以改變組件繫結的版本時就可以直接在 New Version 欄位輸入要轉向的版本編號，然後再按下 Copy To Clipboard 即可將設定內容複製到剪貼簿中，然後再到應用程式組態檔中貼上 (Ctrl + V) 該設定即可。詳情請見: [設定組件繫結重新導向](http://msdn.microsoft.com/zh-tw/library/433ysdt1.aspx) & [Introduction to Versioning and BindingRedirect](http://blogs.msdn.com/thottams/archive/2007/01/30/introduction-to-versioning-and-bindingredirect.aspx)

![Create Assembly Binding Redirect ( 建立組件繫結重新導向 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5b81a3f92c6aec4861ad-image.png "Create Assembly Binding Redirect ( 建立組件繫結重新導向 )")

**7\. Create Shortcut**

當你選取命名空間、組件、類別或類別成員時，按下 \[Create Shortcut\] 會在你的**桌面**建立一個快捷項目(Shortcut)，下次要開啟 [Reflector](http://www.red-gate.com/products/reflector/) 時只要點選這個項目就可開啟 Reflector 並自動開啟到當時建立的那個位置。此功能同時也會出現在 \[**組件層級’s 滑鼠右鍵選單區**\]、\[**類別層級’s 滑鼠右鍵選單區**\] 與 \[**類別成員層級’s 滑鼠右鍵選單區**\]。

[![桌面快捷項目(Shortcut)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/a0e638a75f7ed7b580ed-image_thumb.png "桌面快捷項目(Shortcut)")](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/e9bd94a2537c13cee884-image.png)

\[ **組件層級’s 滑鼠右鍵選單區** \]

![\[ 組件層級’s 滑鼠右鍵選單區 \]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/79cdfd538431e2c2a192-image.png "[ 組件層級’s 滑鼠右鍵選單區 ]") 

**8\. Run ( 執行該組件 )**

當你選取的組件是「**可執行檔**」時，才會出現 **Run** 這個選項，點選後會直接執行該組件。

**9\. Open VS2005/VS2008/VS2010 Command Prompt ( 開啟該組件所在位置的命令提示字元 )**

開啟命令提示字元(cmd.exe)，開啟後直接進入組件所在目錄。

**10\. Open Windows Explorer ( 開啟該組件所在位置的檔案總管 )**

開啟檔案總管，開啟後直接進入組件所在目錄。

**11\.** **Open with ILDasm ( 以 ILDasm 工具開啟該組件 )**

開啟 ILDasm 工具，並直接載入該組件。

**12\. Open With ( 以其他外部程式開啟檔案 )**

以其他外部程式開啟組件檔，你可以自行定義一些外部的應用程式 (例如 Visual Studio 2008) 直接開啟組件、類別、類別成員、資源檔、…等等。如果你點選**類別**或**類別成員**並利用 Open With 功能開啟時，PowerCommands for Reflector 會幫你將 Reflector 反解過的原始碼儲存到 \[我的文件\] 目錄下的 Reflector\\Exports 目錄下。此功能同時也會出現在 \[**類別層級’s 滑鼠右鍵選單區**\] 與 \[**類別成員層級’s 滑鼠右鍵選單區**\] 與 \[**組件資源’s 滑鼠右鍵選單區**\]。

![Open With External Application ( 以其他外部程式開啟檔案 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/67e27bb77715c4f31f21-image.png "Open With External Application ( 以其他外部程式開啟檔案 )")

**13\. Copy Path ( 複製組件路徑 )**

此功能讓你複製組件所在的**完整路徑檔名**或**所在目錄路徑**。

**\[ 類別層級’s 滑鼠右鍵選單區 \]**

![\[ 類別層級’s 滑鼠右鍵選單區 \]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5781ac3efdbe7ab2554f-image.png "[ 類別層級’s 滑鼠右鍵選單區 ]")

**14\. Enum Viewer ( 列舉檢視器 )**

[Reflector](http://www.red-gate.com/products/reflector/) 預設就可以檢視所有列舉項目(Enum)，但列舉項目無法依照字母排序，也無法強制顯示列舉實際的數值，利用 Enum Viewer 讓你可以在主選單的 \[View\] / \[Options\] 中可設定列舉顯示的方式：

![Red Gate's .NET Reflector :: Enum Viewer 讓你可以在主選單的 \[View\] / \[Options\] 中可設定列舉顯示的方式](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ebead0d3265cba6b9c87-image.png "Red Gate's .NET Reflector :: Enum Viewer 讓你可以在主選單的 [View] / [Options] 中可設定列舉顯示的方式")

 ![Red Gate's .NET Reflector :: Enum Viewer 讓你可以在主選單的 \[View\] / \[Options\] 中可設定列舉顯示的方式](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c55ba510db88f11984f4-image.png "Red Gate's .NET Reflector :: Enum Viewer 讓你可以在主選單的 [View] / [Options] 中可設定列舉顯示的方式")

**15\. Bit Flag Converter ( 位元旗標轉換器 )**

只要有標上 \[Flags\] 屬性 (Attribute) 的 **列舉型別 (enum)** 都可以使用這個功能，其實只是一個簡單的二進位計算機而已。例如 System.Data.CommandBehavior 列舉就是一個標有 \[Flags\] 的型別，點選 Bit Flag Converter 後就會出現該列舉的所有清單，當你點選完後就會出現你勾選的項目做 Bit Mask 運算後的結果 (十進位)。

![Red Gate's .NET Reflector :: Bit Flag Converter ( 位元旗標轉換器 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/991d28dfdb26fb5bcbc7-image.png "Red Gate's .NET Reflector :: Bit Flag Converter ( 位元旗標轉換器 )")

**\[ 類別成員層級’s 滑鼠右鍵選單區 \]**

![\[ 類別成員層級’s 滑鼠右鍵選單區 \]](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/89ed9a7535aa0602a6b7-image.png "[ 類別成員層級’s 滑鼠右鍵選單區 ]")

**16\. Email Code ( 轉寄程式碼 )**

此功能可將你選取的類別成員程式碼透過 mailto: 通訊協定開啟預設的本機郵件軟體 (例如: Outlook)，並將程式碼填入到郵件內容中，方便你快速轉寄程式碼給其他人。

**\[ 組件資源’s 滑鼠右鍵選單區 \]**

![Red Gate's .NET Reflector :: Open with Paint ( 以小畫家開啟該圖片 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/3961ed19c08933f2ffa5-image.png "Red Gate's .NET Reflector :: Open with Paint ( 以小畫家開啟該圖片 )") ![Red Gate's .NET Reflector :: Save As RESX ( 將 .resources 資源檔儲存成 \*.resx 檔 )](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f4df0622cc044ec4c785-image.png "Red Gate's .NET Reflector :: Save As RESX ( 將 .resources 資源檔儲存成 *.resx 檔 )")

**17\. Open with Paint ( 以小畫家開啟該圖片 )**

當選取的**組件資源**是**圖片類型**的檔案時就可直接以小畫家開啟該圖片。

**18\. Save As RESX ( 將 .resources 資源檔儲存成 \*.resx 檔 )**

當選取的**組件資源**是 \*.resources 格式時，使用此功能就能將該資源儲存成 XML 格式的 \*.resx 資源檔。

\---

我的天啊，這篇文章花了我整整三個小時撰寫，比我預期的撰寫時間還長，不過一條一條的測試/試用之後也對 [Reflector](http://www.red-gate.com/products/reflector/) 有了更深一層的認識，算是利用 PowerCommands for Reflector 精通了 [Reflector](http://www.red-gate.com/products/reflector/) 所有操作技巧吧，收穫頗多。 ^\_^

**相關連結**

-   PowerCommands for Reflector
-   [.NET Reflector](http://www.red-gate.com/products/reflector/)
-   [組件繫結重新導向](http://msdn.microsoft.com/zh-tw/library/2fc472t2.aspx)
-   [設定組件繫結重新導向](http://msdn.microsoft.com/zh-tw/library/433ysdt1.aspx)
-   [Introduction to Versioning and BindingRedirect](http://blogs.msdn.com/thottams/archive/2007/01/30/introduction-to-versioning-and-bindingredirect.aspx)
