每個(gè).NET開發(fā)人員應(yīng)該下載的十個(gè)必備工具_(dá)第1頁
每個(gè).NET開發(fā)人員應(yīng)該下載的十個(gè)必備工具_(dá)第2頁
每個(gè).NET開發(fā)人員應(yīng)該下載的十個(gè)必備工具_(dá)第3頁
每個(gè).NET開發(fā)人員應(yīng)該下載的十個(gè)必備工具_(dá)第4頁
每個(gè).NET開發(fā)人員應(yīng)該下載的十個(gè)必備工具_(dá)第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.net tools.每 個(gè) .net 開 發(fā) 人 員 應(yīng) 該 下 載 的 十 個(gè) 必 備 工 具原 著 : james avery編 譯 : northtibet本 文 討 論 的 工 具 如 下 :nunit : 編 寫 單 元 測(cè) 試 的 工 具工 具 下 載 地 址 :http:/ : 創(chuàng) 建 代 碼 文 檔 的 工 具nant : 生 成 解 決 方 案 的 工 具codesmith : 代 碼 生 成 工 具fxcop : 用 于 監(jiān) 視 代 碼 的 代 碼 警 察snippet compiler: 小 型 代 碼 段 編 譯 工 具兩 個(gè) 不 同 的 轉(zhuǎn) 換 器 工 具 , as

2、p.net 版 本 轉(zhuǎn) 換 器 ( version switcher) 和visual studio .net 項(xiàng) 目 轉(zhuǎn) 換 器 ( project converter)regulator: 生 成 正 則 表 達(dá) 式 工 具.net reflector: 程 序 集 分 析 檢 查 工 具本 文 使 用 了 以 下 技 術(shù) : .net , c# , visual basic .net, visual studio .net除 非 你 使 用 可 獲 得 的 最 好 的 工 具 ,否 則 別 指 望 能 生 成 一 流 的 應(yīng) 用 程 序 。除 了visual studio .net 這

3、種 大 型 工 具 以 外 , 你 從.net 社 區(qū) 還 可 以 獲 得 許 多 小 型的 、 不 太 為 人 所 知 的 工 具 。 我 在 本 文 中 將 向 你 介 紹 幾 個(gè) 目 前 可 以 獲 得 的 、 面向.net 開 發(fā) 的 最 好 的 免 費(fèi) 工 具 。 我 將 引 領(lǐng) 你 完 成 一 個(gè) 有 關(guān) 如 何 使 用 每 種 工 具的 快 速 教 程 有 些 工 具 在 許 多 場(chǎng) 合 可 以 節(jié) 約 你 的 時(shí) 間 , 而 另 一 些 工 具 則 可 能完 全 改 變 你 編 寫 代 碼 的 方 式 。 因 為 我 要 在 本 篇 文 章 中 介 紹 如 此 之 多 的 不

4、同 工 具 ,所 以 我 無 法 詳 盡 討 論 其 中 每 種 工 具 ,但 你 應(yīng) 該 充 分 了 解 每 種 工 具 的 信 息 ,以 便 決定 哪 些 工 具 對(duì) 你 的 項(xiàng) 目 有 用 。snippet compilersnippet compiler 是 一 個(gè) 基 于windows 的 小 型 應(yīng) 用 程 序 , 你 可 以 通 過 它來 編 寫 、 編 譯 和 運(yùn) 行 代 碼 。 如 果 你 具 有 較 小 的 代 碼 段 , 并 且 你 不 想 創(chuàng) 建 完 整 的visual studio .net 項(xiàng) 目 ( 以 及 該 項(xiàng) 目 附 帶 的 所 有 文 件 ) , 則 該

5、工 具 會(huì) 很 有 用 。例 如 , 假 設(shè) 我 希 望 向 你 示 范 如 何 從microsoft .net 框 架 中 啟 動(dòng) 另 一 個(gè) 應(yīng) 用程 序 。 在snippet compiler 中 , 我 將 通 過 新 建 一 個(gè) 能 夠 創(chuàng) 建 小 型 控 制 臺(tái) 應(yīng) 用 程序 的 文 件 開 始 。 可 以 在 該 控 制 臺(tái) 應(yīng) 用 程 序 的main 方 法 內(nèi) 部 創(chuàng) 建 代 碼 片 段 , 而這 正 是 我 要 在 這 里 做 的 事 情 。 下 面 的 代 碼 片 段 演 示 了 如 何 從.net 框 架 中 創(chuàng) 建記 事 本 實(shí) 例 :system.diagnosti

6、cs.process proc = new system.diagnostics.process();proc.startinfo.filename= notepad.exe;proc.start();proc.waitforexit();當(dāng) 然 該 代 碼 片 段 本 身 無 法 編 譯 , 而 這 正 是snippet compiler 的 用 武 之 地 。figure 1 顯 示 了snippet compiler 中 的 這 一 代 碼 示 例 。figure 1 snippet compiler 運(yùn) 行 畫 面為 了 測(cè) 試 該 代 碼 片 段 , 只 須 按play ( 運(yùn) 行

7、) 按 鈕 ( 綠 色 三 角 形 ) , 它 就 會(huì)在 調(diào) 試 模 式 下 運(yùn) 行 。該 代 碼 片 段 將 生 成 一 個(gè) 彈 出 式 控 制 臺(tái) 應(yīng) 用 程 序 ,并 且 將 顯 示記 事 本 。 當(dāng) 你 關(guān) 閉 記 事 本 時(shí) , 該 控 制 臺(tái) 應(yīng) 用 程 序 也 將 關(guān) 閉 。就 我 個(gè) 人 而 言 ,我 是 在 嘗 試 為 某 位 有 求 于 我 的 人 士 創(chuàng) 建 一 個(gè) 小 型 示 例 時(shí) ,才發(fā) 現(xiàn)snippet compiler 是 個(gè) 無 價(jià) 之 寶 如 果 不 使 用 該 工 具 , 那 么 我 通 常 必 須新 建 一 個(gè) 項(xiàng) 目 ,確 保 每 個(gè) 部 分 都 能

8、編 譯 通 過 ,然 后 將 代 碼 片 段 發(fā) 送 給 求 助 者 ,最后 刪 除 該 項(xiàng) 目 。 snippet compiler 使 得 這 一 過 程 變 得 更 容 易 、 更 爽 快 。snippet compiler 由jeff key 編 寫 , 下 載 地 址 是 :http:/ 是 最 近 添 加 到 我 的 頭 等 工 具 清 單 中 的 。 它 是 一 種 很 有 特 色 的 工具 , 能 夠 使 生 成 和 測(cè) 試 正 則 表 達(dá) 式 變 得 很 容 易 。 由 于 正 則 表 達(dá) 式 在.net 框 架中 受 到 極 好 的 支 持 ,因 而 人 們 對(duì) 正 則 表

9、 達(dá) 式 重 新 產(chǎn) 生 了 興 趣 。正 則 表 達(dá) 式 用 來 基于 字 符 、頻 率 和 字 符 順 序 定 義 字 符 串 中 的 模 式 。它 們 最 常 見 的 用 途 是 作 為 驗(yàn) 證 用戶 輸 入 有 效 性 的 手 段 或 者 作 為 在 較 大 字 符 串 中 查 找 字 符 串 的 方 法 例 如 , 在web 頁 上 查 找url 或 電 子 郵 件 地 址 。regulator 允 許 你 輸 入 一 個(gè) 正 則 表 達(dá) 式 以 及 一 些 針 對(duì) 其 運(yùn) 行 該 表 達(dá) 式 的 輸入 。這 樣 ,在 應(yīng) 用 程 序 中 實(shí) 現(xiàn) 該 正 則 表 達(dá) 式 之 前 ,你

10、 便 可 以 了 解 它 將 產(chǎn) 生 什 么 效果 以 及 它 將 返 回 哪 些 種 類 的 匹 配 項(xiàng) 。 figure 2 顯 示 了 帶 有 簡(jiǎn) 單 正 則 表 達(dá) 式 的regulator。figure 2 regulator 運(yùn) 行 畫 面文 檔 中 包 含 該 正 則 表 達(dá) 式 在 該 示 例 中 ,它 是0-9*,應(yīng) 該 匹 配 一 行 中 任意 數(shù) 量 的 數(shù) 字 。右 下 側(cè) 的 框 中 含 有 針 對(duì) 該 正 則 表 達(dá) 式 的 輸 入 ,而 左 下 側(cè) 的 框 顯 示了 該 正 則 表 達(dá) 式 在 輸 入 內(nèi) 容 中 找 到 的 匹 配 項(xiàng) 。 象 這 樣 在 單 獨(dú)

11、 應(yīng) 用 程 序 中 編 寫 和 測(cè)試 正 則 表 達(dá) 式 , 要 比 嘗 試 在 你 自 己 應(yīng) 用 程 序 中 處 理 它 們 容 易 得 多 。regulator 中 的 最 佳 功 能 之 一 是 能 夠 在 搜 索 在 線 正 則 表達(dá) 式 庫 。例 如 ,如 果 你 在 搜 索 框 中 輸 入 字 符 串 “phone”,你 將 找 到20 種 多 種 不同 的 能 夠 匹 配 各 種 電 話 號(hào) 碼 的 正 則 表 達(dá) 式 ,包 括 用 于 英 國 、澳 大 利 亞 的 表 達(dá) 式 以及 其 它 許 多 電 話 號(hào) 碼 。 regulator 由roy osherove 編 寫

12、, 下 載 地 址 是 :http:/royo.is-a- 是 一 種 基 于 模 板 的 代 碼 生 成 工 具 , 它 使 用 類 似 于asp.net 的語 法 來 生 成 任 意 類 型 的 代 碼 或 文 本 。與 其 它 許 多 代 碼 生 成 工 具 不 同 , codesmith 不 要 求 你 訂 閱 特 定 的 應(yīng) 用 程 序 設(shè) 計(jì) 或 體 系 結(jié) 構(gòu) 。借 助codesmith 可 以 生 成 包 括簡(jiǎn) 單 的 強(qiáng) 類 型 集 合 和 完 整 應(yīng) 用 程 序 在 內(nèi) 的 任 何 東 西 。當(dāng) 生 成 應(yīng) 用 程 序 時(shí) ,無 論 是 編 寫 數(shù) 據(jù) 訪 問 代 碼 還

13、是 生 成 自 定 義 集 合 ,你 會(huì) 發(fā)現(xiàn) 經(jīng) 常 需 要 重 復(fù) 完 成 某 些 特 定 的 任 務(wù) 。這 時(shí)codesmith 就 顯 得 特 別 有 用 ,因 為你 可 以 編 寫 模 板 自 動(dòng) 完 成 這 些 任 務(wù) ,從 而 不 僅 提 高 你 的 工 作 效 率 ,而 且 能 夠 自 動(dòng)完 成 那 些 最 為 乏 味 的 任 務(wù) 。codesmith 附 帶 了 許 多 模 板 ,包 括 對(duì) 應(yīng) 于 所 有.net 集 合 類 型 的 模 板 以 及 用 于 生 成 存 儲(chǔ) 過 程 的 模 板 , 但 該 工 具 的 真 正 威 力 在 于 能 夠 創(chuàng)建 自 定 義 模 板

14、。 為 了 使 你 能 夠 入 門 , 我 將 快 速 介 紹 一 下 如 何 生 成 自 定 義 模 板 。生 成自定 義模板codesmith 模 板 只 是 一 些 可 以 在 任 意 文 本 編 輯 器 中 創(chuàng) 建 的 文 本 文 件 。 它 們的 唯 一 要 求 是 用.cst 文 件 擴(kuò) 展 名 來 保 存 它 們 。我 將 要 生 成 的 示 例 模 板 將 接 受 一個(gè) 字 符 串 ,然 后 基 于 該 字 符 串 生 成 一 個(gè) 類 。創(chuàng) 建 模 板 的 第 一 步 是 添 加 模 板 頭 ,它可 聲 明 模 板 的 語 言 、 目 標(biāo) 語 言 以 及 簡(jiǎn) 要 模 板 說 明

15、 :模 板 的 下 一 部 分 是 屬 性 聲 明 , 在 這 里 可 聲 明 將 在 模 板 每 次 運(yùn) 行 時(shí) 指 定 的 屬性 。就 該 模 板 而 言 ,我 要 使 用 的 唯 一 屬 性 只 是 一 個(gè) 字 符 串 ,因 此 屬 性 聲 明 如 下 所示 :該 屬 性 聲 明 將 使classname 屬 性 出 現(xiàn) 在codesmith 屬 性 窗 口 中 ,以 便 可以 在 模 板 運(yùn) 行 時(shí) 指 定 它 。 下 一 步 是 實(shí) 際 生 成 模 板 主 體 , 它 非 常 類 似 于 用asp.net 進(jìn) 行 編 碼 。你 可 以 在figure 3中 查 看 該 模 板 的 主

16、 體 。 編 輯 更 新 6/16/2004:figure 3中 的 代 碼 已 被 更 新 , 以 便 對(duì) 多 線 程 操 作 保 持 安 全 。 正 如 你 所 見 , 該 模 板 接 受 字 符 串 輸 入 并 使 用 該 類 名 生 成 單 獨(dú) 的 類 。 在 模 板 主 體 中 ,使 用 與asp.net 中 相 同 的 起 始 和 結(jié) 束 標(biāo) 記 。 在 該 模 板 中 , 我 只 是 插 入 屬 性 值 ,但 你 還 可 以 在 這 些 標(biāo) 記 內(nèi) 部 使 用 任 意 類 型 的.net 代 碼 。 在 該 模 板 完 成 之 后 ,你 就 可 以 通 過 雙 擊 它 或 者 從

17、codesmith 應(yīng) 用 程 序 中 打 開 它 將 其 加 載 到codesmith 中 。 figure 4 顯 示 了 已 經(jīng) 加 載 到codesmith 中 的 該 模 板 。figure 4 codesmith 模 版你 可 以 看 到 左 側(cè) 的 屬 性 正 是 我 在 該 模 板 中 聲 明 的 屬 性 。 如 果 我 輸 入“ singletonclass”作 為 類 名 ,并 單 擊generate 按 鈕 ,則 生 成figure 3的 底 部 顯示 的 類 。codesmith 使 用 起 來 相 當(dāng) 容 易 , 如 果 能 夠 正 確 應(yīng) 用 , 則 可 以 產(chǎn) 生

18、 一 些 令 人難 以 置 信 的 結(jié) 果 。 面 向 代 碼 生 成 的 應(yīng) 用 程 序 中 最 常 見 的 部 分 之 一 是 數(shù) 據(jù) 訪 問 層 。codesmith 包 括 一 個(gè) 名 為schemaexplorer 的 特 殊 的 程 序 集 , 可 用 來 從 表 、 存儲(chǔ) 過 程 或 幾 乎 任 何 其 他sql server? 對(duì) 象 生 成 模 板 。codesmith 由eric j. smith 編 寫 , 下 載 地 址 是 :http:/ 是 為.net 框 架 生 成 的 開 放 源 代 碼 單 元 測(cè) 試 框 架 。 nunit 使 你 可 以用 你 喜 歡 的

19、語 言 編 寫 測(cè) 試 , 從 而 測(cè) 試 應(yīng) 用 程 序 的 特 定 功 能 。 當(dāng) 你 首 次 編 寫 代 碼 時(shí) ,單 元 測(cè) 試 是 一 種 測(cè) 試 代 碼 功 能 的 很 好 方 法 , 它 還 提 供 了 一 種 對(duì) 應(yīng) 用 程 序 進(jìn) 行 回 歸測(cè) 試 的 方 法 。nunit 應(yīng) 用 程 序 提 供 了 一 個(gè) 用 于 編 寫 單 元 測(cè) 試 的 框 架 ,以 及 一 個(gè) 運(yùn)行 這 些 測(cè) 試 和 查 看 結(jié) 果 的 圖 形 界 面 。編 寫nunit 測(cè)試作 為 示 例 ,我 將 測(cè) 試.net 框 架 中hashtable 類 的 功 能 ,以 確 定 是 否 可 以添 加

20、 兩 個(gè) 對(duì) 象 并 且 隨 后 檢 索 這 些 對(duì) 象 。 我 的 第 一 步 是 添 加 對(duì)nunit.framework 程 序 集 的 引 用 , 該 程 序 集 將 賦 予 我 對(duì)nunit 框 架 的 屬 性 和 方 法 的 訪 問 權(quán) 。 接 下來 ,我 將 創(chuàng) 建 一 個(gè) 類 并 用testfixture 屬 性 標(biāo) 記 它 。該 屬 性 使nunit 可 以 知 道該 類 包 含nunit 測(cè) 試 :using system;using system.collections;using nunit.framework;namespace nunitexampletestfix

21、turepublic class hashtabletest public hashtabletest() 下 一 步 , 我 將 創(chuàng) 建 一 個(gè) 方 法 并 用test 屬 性 標(biāo) 記 它 , 以 便nunit 知 道 該方 法 是 一 個(gè) 測(cè) 試 。 然 后 , 我 將 建 立 一 個(gè)hashtable 并 向 其 添 加 兩 個(gè) 值 , 再 使 用assert.areequal 方 法 查 看 我 是 否 可 以 檢 索 到 與 我 添 加 到hashtable 的 值 相 同的 值 , 如 下 面 的 代 碼 所 示 :testpublic void hashtableaddtest(

22、)hashtable ht = new hashtable();ht.add(key1, value1);ht.add(key2, value2);assert.areequal(value1, htkey1, wrong object returned!);assert.areequal(value2, htkey2, wrong object returned!); 這 將 確 認(rèn) 我 可 以 首 先 向hashtable 中 添 加 值 并 隨 后 檢 索 相 應(yīng) 的 值這 是一 個(gè) 很 簡(jiǎn) 單 的 測(cè) 試 , 但 能 夠 表 現(xiàn)nunit 的 功 能 。 存 在 許 多 測(cè) 試 類 型

23、 以 及 各 種assert 方 法 , 可 使 用 它 們 來 測(cè) 試 代 碼 的 每 個(gè) 部 分 。要 運(yùn) 行 該 測(cè) 試 ,我 需 要 生 成 項(xiàng) 目 ,在nunit 應(yīng) 用 程 序 中 打 開 生 成 的 程 序 集 ,然 后 單 擊run 按 鈕 。figure 5 顯 示 了 結(jié) 果 。當(dāng) 我 看 到 那 個(gè) 大 的 綠 色 條 紋 時(shí) ,我有 一 種 興 奮 和 頭 暈 的 感 覺 ,因 為 它 讓 我 知 道 測(cè) 試 已 經(jīng) 通 過 了 。這 個(gè) 簡(jiǎn) 單 的 示 例 表明nunit 和 單 元 測(cè) 試 是 多 么 方 便 和 強(qiáng) 大 。 由 于 能 夠 編 寫 可 以 保 存

24、的 單 元 測(cè) 試 ,并 且 每 當(dāng) 你 更 改 代 碼 時(shí) 都 可 以 重 新 運(yùn) 行 該 單 元 測(cè) 試 , 你 不 僅 可 以 更 容 易 地 檢 測(cè) 到代 碼 中 的 缺 陷 , 而 且 最 終 能 夠 交 付 更 好 的 應(yīng) 用 程 序 。figure 5 nunitnunit 是 一 個(gè) 開 放 源 代 碼 項(xiàng) 目 ,下 載 地 址 是 :/。還 有 一個(gè) 優(yōu) 秀 的nunit visual studio .net 外 掛 程 序 , 它 使 你 可 以 直 接 從visual studio 中 運(yùn) 行 單 元 測(cè) 試 。 你 可 以 在htt

25、p:/ 它 。 有 關(guān)nunit 及 其 在 測(cè) 試 驅(qū) 動(dòng) 開 發(fā) 中 的 地 位 的 詳 細(xì) 信 息 , 請(qǐng) 參 閱 文 章 :“ test-driven c#: improve the design and flexibility of your project with extreme programming techniques”fxcop.net 框 架 非 常 強(qiáng) 大 ,這 意 味 極 有 可 能 創(chuàng) 建 優(yōu) 秀 的 應(yīng) 用 程 序 ,但 也 同 樣 存 在創(chuàng) 建 劣 質(zhì) 程 序 的 可 能 。 fxcop 是 有 助 于 創(chuàng) 建 更 好 的 應(yīng) 用 程 序 的 工 具 之 一

26、, 通 過分 析 程 序 集 , 并 使 用 許 多 不 同 的 規(guī) 則 來 檢 查 它 是 否 符 合 這 些 規(guī) 則 。 fxcop 隨 附了 由microsoft 創(chuàng) 建 的 一 組 規(guī) 則 , 你 也 可 以 創(chuàng) 建 并 包 括 你 自 己 的 規(guī) 則 。 例 如 ,如 果 你 決 定 所 有 的 類 都 應(yīng) 該 具 有 一 個(gè) 不 帶 任 何 參 數(shù) 的 默 認(rèn) 構(gòu) 造 函 數(shù) , 則 可 以 編 寫一 條 規(guī) 則 ,以 確 保 程 序 集 的 每 個(gè) 類 上 都 具 有 一 個(gè) 構(gòu) 造 函 數(shù) 。這 樣 ,無 論 是 誰 編 寫該 代 碼 ,你 都 將 獲 得 一 定 程 度 的

27、一 致 性 。 如 果 你 需 要 有 關(guān) 創(chuàng) 建 自 定 義 規(guī) 則 的 詳細(xì) 信 息 , 參 見john robbins 有 關(guān) 這 方 面 的bugslayer專 欄 文 章 。那 么 , 讓 我 們 看 看 實(shí) 際 運(yùn) 行 的fxcop , 并 且 留 心 一 下 它 在 我 正 在 開 發(fā) 的nunitexample 程 序 集 中 找 到 什 么 錯(cuò) 誤 。 當(dāng) 你 打 開fxcop 時(shí) , 你 首 先 需 要 創(chuàng) 建一 個(gè)fxcop 項(xiàng) 目 ,然 后 向 其 添 加 你 要 測(cè) 試 的 程 序 集 。在 將 該 程 序 集 添 加 到 項(xiàng) 目以 后 ,就 可 以 按analyze

28、 ,fxcop 將 分 析 該 程 序 集 。figure 6 顯 示 了fxcop 在該 程 序 集 中 找 到 的 錯(cuò) 誤 和 警 告 。figure 6 fxcop 運(yùn) 行 畫 面fxcop 在 我 的 程 序 集 中 找 到 了 幾 個(gè) 問 題 。 你 可 以 雙 擊 某 個(gè) 錯(cuò) 誤 以 查 看 詳 細(xì)信 息 ,包 括 規(guī) 則 說 明 以 及 在 哪 里 可 以 找 到 更 多 信 息 。( 你 可 以 做 的 一 件 有 趣 的 事情 是 在 框 架 程 序 集 上 運(yùn) 行fxcop 并 查 看 發(fā) 生 了 什 么 事 情 。 )fxcop 可 以 幫 助 你 創(chuàng) 建 更 好 的 、

29、 更 一 致 的 代 碼 , 但 它 無 法 補(bǔ) 償 低 劣 的 應(yīng) 用程 序 設(shè) 計(jì) 或 非 常 簡(jiǎn) 單 拙 劣 的 編 程 。 fxcop 也 不 能 替 代 對(duì) 等 代 碼 檢 查 , 但 是 因 為它 可 以 在 進(jìn) 行 代 碼 檢 查 之 前 捕 獲 大 量 錯(cuò) 誤 , 所 以 你 可 以 花 費(fèi) 更 多 時(shí) 間 來 解 決 嚴(yán) 重的 問 題 , 而 不 必 擔(dān) 心 命 名 約 定 。 fxcop 由microsoft 開 發(fā) , 下 載 地 址 是 :http:/ roeder 的.net reflector下 一 個(gè) 必 不 可 少 的 工 具 稱 為.net reflector

30、, 它 是 一 個(gè) 類 瀏 覽 器 和 反 編 譯器 ,可 以 分 析 程 序 集 并 向 你 展 示 它 的 所 有 秘 密 。 .net 框 架 向 全 世 界 引 入 了 可 用來 分 析 任 何 基 于.net 的 代 碼 ( 無 論 它 是 單 個(gè) 類 還 是 完 整 的 程 序 集 ) 的 反 射 概念 。 反 射 還 可 以 用 來 檢 索 有 關(guān) 特 定 程 序 集 中 包 含 的 各 種 類 、 方 法 和 屬 性 的 信 息 。使 用.net reflector,你 可 以 瀏 覽 程 序 集 的 類 和 方 法 ,可 以 分 析 由 這 些 類 和 方 法生 成 的mic

31、rosoft 中 間 語 言(msil), 并 且 可 以 反 編 譯 這 些 類 和 方 法 并 查 看c# 或visual basic ?.net 中 的 等 價(jià) 類 和 方 法 。為 了 演 示.net reflector 的 工 作 方 式 , 我 將 加 載 和 分 析 前 面 已 經(jīng) 顯 示 的nunitexample 程 序 集 。 figure 7 顯 示 了.net reflector 中 加 載 的 該 程 序 集 。figure 7 nunitexample 程 序 集在.net reflector 內(nèi) 部 , 有 各 種 可 用 來 進(jìn) 一 步 分 析 該 程 序 集

32、的 工 具 。 要 查看 構(gòu) 成 某 個(gè) 方 法 的msil , 請(qǐng) 單 擊 該 方 法 并 從 菜 單 中 選 擇disassembler。除 了 能 夠 查 看msil 以 外 , 你 還 可 以 通 過 選 擇tools 菜 單 下 的decompiler 來 查 看 該 方 法 的c# 形 式 。通 過 在languages 菜 單 下 更 改 你 的 選擇 , 你 還 可 以 查 看 該 方 法 被 反 編 譯 到visual basic .net 或delphi 以 后 的 形 式 。以 下 為.net reflector 生 成 的 代 碼 :public void hashta

33、bleaddtest() hashtable hashtable1;hashtable1 = new hashtable();hashtable1.add(key1, value1);hashtable1.add(key2, value2);assert.areequal(value1, hashtable1key1, wrong object returned!);assert.areequal(value2, hashtable1key2,wrong object returned!);前 面 的 代 碼 看 起 來 非 常 像 我 為 該 方 法 實(shí) 際 編 寫 的 代 碼 。 以 下

34、為 該 程 序 集 中 的 實(shí) 際代 碼 :public void hashtableaddtest()hashtable ht = new hashtable();ht.add(key1, value1);ht.add(key2, value2);assert.areequal(value1, htkey1,wrong object returned!);assert.areequal(value2, htkey2,wrong object returned!); 盡 管 上 述 代 碼 中 存 在 一 些 小 的 差 異 , 但 它 們 在 功 能 上 是 完 全 相 同 的 。雖 然 該

35、 示 例 是 一 種 顯 示 實(shí) 際 代 碼 與 反 編 譯 代 碼 之 間 對(duì) 比 的 好 方 法 , 但 在 我 看來 ,它 并 不 代 表.net reflector 所 具 有 的 最 佳 用 途分 析.net 框 架 程 序 集和 方 法 。 .net 框 架 提 供 了 許 多 執(zhí) 行 類 似 操 作 的 不 同 方 法 。例 如 ,如 果 你 需 要 從xml 中 讀 取 一 組 數(shù) 據(jù) , 則 存 在 多 種 使 用xmldocument、 xpathnavigator 或xmlreader 完 成 該 工 作 的 不 同 方 法 。 通 過 使 用.net reflector

36、,你 可 以 查 看microsoft 在 編 寫 數(shù) 據(jù) 集 的readxml 方 法 時(shí) 使 用 了 什 么 , 或 者 查 看 他 們 在 從 配置 文 件 讀 取 數(shù) 據(jù) 時(shí) 做 了 哪 些 工 作 。.net reflector 還 是 一 個(gè) 了 解 以 下 最 佳 實(shí) 施 策略 的 優(yōu) 秀 方 法 :創(chuàng) 建 諸 如httphandlers 或 配 置 處 理 程 序 之 類 的 對(duì) 象 ,因 為 你 可以 了 解 到microsoft 工 作 組 實(shí) 際 上 是 如 何 在 框 架 中 生 成 這 些 對(duì) 象 的 。.net reflector 由lutz roeder 編 寫

37、, 下 載 地 址 是 :http:/ 寫 代 碼 文 檔 資 料 幾 乎 總 是 一 項(xiàng) 令 人 畏 懼 的 任 務(wù) 。 我 所 說 的 不 是 早 期 設(shè) 計(jì) 文檔 , 甚 至 也 不 是 更 為 詳 細(xì) 的 設(shè) 計(jì) 文 檔 ; 我 說 的 是 記 錄 類 上 的 各 個(gè) 方 法 和 屬 性 。ndoc 工 具 能 夠 使 用 反 射 來 分 析 程 序 集 , 并 使 用 從c# xml 注 釋 生 成 的xml 自 動(dòng) 為 代 碼 生 成 文 檔 資 料 。 xml 注 釋 僅 適 用 于c# , 但 有 一 個(gè) 名 為vbcommenter 的visual studio .net p

38、ower toy, 它 能 夠 為visual basic .net 完 成 類 似 的 工 作 。此 外 ,下 一 版 本 的visual studio 將 為 更 多 語 言 支 持xml 注釋 。使 用ndoc 時(shí) , 你 仍 然 在 編 寫 代 碼 的 技 術(shù) 文 檔 , 但 你 是 在 編 寫 代 碼 的 過 程中 完 成 了 文 檔 編 寫 工 作( 在xml 注 釋 中 ),而 這 更 容 易 忍 受 。使 用ndoc 時(shí) ,第 一 步 是 為 你 的 程 序 集 打 開xml 注 釋 生 成 功 能 。 右 鍵 單 擊 該 項(xiàng) 目 并 選 擇properties | confi

39、guration properties | build, 然 后 在xml documentation file 選 項(xiàng) 中 輸 入 用 于 保 存xml 文 件 的 路 徑 。當(dāng) 該 項(xiàng) 目 生 成 時(shí) ,將 創(chuàng) 建 一 個(gè)xml 文件 , 其 中 包 含 所 有xml 注 釋 。 下 面 是nunit 示 例 中 的 一 個(gè) 用xml 編 寫 了 文檔 的 方 法 :/ / this test adds a number of values to the hashtable collection / and then retrieves those values and checks if

40、 they match./ testpublic void hashtableaddtest()/method body here 有 關(guān) 該 方 法 的xml 文 檔 資 料 將 被 提 取 并 保 存 在xml 文 件 中 , 如 下 所 示 :this test adds a number of values to the hashtable collectionand then retrieves those values and checks if they match. ndoc 使 用 反 射 來 考 察 你 的 程 序 集 , 然 后 讀 取 該 文 檔 中 的xml , 并

41、且 將 它們 進(jìn) 行 匹 配 。 ndoc使 用 該 數(shù) 據(jù) 來 創(chuàng) 建 任 意 數(shù) 量 的 不 同 文 檔 格 式 , 包 括html 幫助 文 件(chm) 。 在 生 成xml 文 件 以 后 , 下 一 步 是 將 程 序 集 和xml 文 件 加 載到ndoc 中 , 以 便 可 以 對(duì) 它 們 進(jìn) 行 處 理 。 通 過 打 開ndoc 并 單 擊add 按 鈕 ,可 以 容 易 地 完 成 該 工 作 。在 將 程 序 集 和xml 文 件 加 載 到ndoc 中 并 且 使 用 可 用 的 屬 性 范 圍 自 定 義輸 出 以 后 ,單 擊generate 按 鈕 將 啟 動(dòng)

42、生 成 文 檔 資 料 的 過 程 。使 用 默 認(rèn) 的 屬 性 ,ndoc 可 以 生 成 一 些 非 常 吸 引 人 并 且 實(shí) 用 的.html 和.chm 文 件 , 從 而 以 快 速有 效 的 方 式 自 動(dòng) 完 成 原 來 非 常 乏 味 的 任 務(wù) 。ndoc 是 一 個(gè) 開 放 源 代 碼 項(xiàng) 目 , 下 載 地 址 是 : http:/ 是 一 個(gè) 基 于.net 的 生 成 工 具 , 與 當(dāng) 前 版 本 的visual studio .net 不同 ,它 使 得 為 你 的 項(xiàng) 目 創(chuàng) 建 生 成 過 程 變 得 非 常 容 易 。當(dāng) 你 擁 有 大 量 從 事 單 個(gè)

43、 項(xiàng) 目的 開 發(fā) 人 員 時(shí) ,你 不 能 依 賴 于 從 單 個(gè) 用 戶 的 座 位 進(jìn) 行 生 成 。你 也 不 希 望 必 須 定 期手 動(dòng) 生 成 該 項(xiàng) 目 。你 更 愿 意 創(chuàng) 建 每 天 晚 上 運(yùn) 行 的 自 動(dòng) 生 成 過 程 。 nant 使 你 可 以生 成 解 決 方 案 、復(fù) 制 文 件 、運(yùn) 行nunit 測(cè) 試 、發(fā) 送 電 子 郵 件 ,等 等 。遺 憾 的 是 ,nant 缺 少 漂 亮 的 圖 形 界 面 ,但 它 的 確 具 有 可 以 指 定 應(yīng) 該 在 生 成 過 程 中 完 成 哪 些任 務(wù) 的 控 制 臺(tái) 應(yīng) 用 程 序 和xml 文 件 。注

44、意 ,msbuild ( 屬 于visual studio 2005 的 新 的 生 成 平 臺(tái) )為 每 種 健 壯 的 生 成 方 案 進(jìn) 行 了 準(zhǔn) 備 ,并 且 由 基 于xml 的 項(xiàng) 目文 件 以 類 似 的 方 式 驅(qū) 動(dòng) 。實(shí) 際運(yùn)行 的nant在 該 示 例 中 , 我 將 為 前 面 創(chuàng) 建 的nunitexample 解 決 方 案 創(chuàng) 建 一 個(gè)nant 版 本 文 件 。 首 先 , 我 需 要 創(chuàng) 建 一 個(gè) 具 有.build 擴(kuò) 展 名 的xml 文 件 , 將 其 放 在我 的 項(xiàng) 目 的 根 目 錄 中 ,然 后 向 該 文 件 的 頂 部 添 加 一 個(gè)x

45、ml 聲 明 。我 需 要 添 加 到該 文 件 的 第 一 個(gè) 標(biāo) 記 是project 標(biāo) 記 :the nunit example project項(xiàng) 目 標(biāo) 記 還 用 于 設(shè) 置 項(xiàng) 目 名 稱 、 默 認(rèn) 目 標(biāo) 以 及 基 目 錄 。 description 標(biāo) 記 用于 設(shè) 置 該 項(xiàng) 目 的 簡(jiǎn) 短 說 明 。接 著 ,我 將 添 加property 標(biāo) 記 ,該 標(biāo) 記 可 用 于 將 設(shè) 置 存 儲(chǔ) 到 單 個(gè) 位 置( 隨后 可 以 從 文 件 中 的 任 意 位 置 訪 問 該 位 置 )。在 該 例 中 ,我 將 創(chuàng) 建 一 個(gè) 名 為debug 的 屬 性 , 我

46、可 以 隨 后 將 其 設(shè) 置 為true 或false , 以 反 映 我 是 否 要 在 調(diào) 試 配 置 下編 譯 該 項(xiàng) 目 。( 最 后 ,這 一 特 定 屬 性 并 未 真 正 影 響 如 何 生 成 該 項(xiàng) 目 ;它 只 是 你 設(shè)置 的 一 個(gè) 變 量 , 當(dāng) 你 真 正 確 定 了 如 何 生 成 該 項(xiàng) 目 時(shí) 將 讀 取 該 變 量 。 )接 下 來 , 我 需 要 創(chuàng) 建 一 個(gè)target 標(biāo) 記 。 一 個(gè) 項(xiàng) 目 可 以 包 含 多 個(gè) 可 在nant 運(yùn) 行 時(shí) 指 定 的target。 如 果 未 指 定target, 則 使 用 默 認(rèn)target ( 我 在

47、project 元素 中 設(shè) 置 的target) 。 在 該 示 例 中 , 默 認(rèn)target 是build 。 讓 我 們 觀 察 一 下target 元 素 , 它 將 包 含 大 多 數(shù) 生 成 信 息 :在target 元 素 內(nèi) , 我 將 把target 的 名 稱 設(shè) 置 為build , 并 且 創(chuàng) 建 有 關(guān) 該target 將 做 哪 些 工 作 的 說 明 。我 還 將 創(chuàng) 建 一 個(gè)csc 元 素 ,該 元 素 用 于 指 定 應(yīng) 該傳 遞 給csc c# 編 譯 器 的 數(shù) 據(jù) 。 讓 我 們 看 一 下 該csc 元 素 :首 先 ,我 必 須 設(shè) 置 該csc

48、 元 素 的target。在 該 例 中 ,我 將 創(chuàng) 建 一 個(gè).dll 文件 , 因 此 我 將target 設(shè) 置 為library。接 下 來 , 我 必 須 設(shè) 置csc 元 素 的output,它 是 將 要 創(chuàng) 建.dll 文 件 的 位 置 。 最 后 , 我 需 要 設(shè) 置debug 屬 性 , 它 確 定 了 是否 在 調(diào) 試 中 編 譯 該 項(xiàng) 目 。因 為 我 在 前 面 創(chuàng) 建 了 一 個(gè) 用 于 存 儲(chǔ) 該 值 的 屬 性 ,所 以 我可 以 使 用 下 面 的 字 符 串 來 訪 問 該 屬 性 的 值 : $debug。 csc 元 素 還 包 含 一 些 子元

49、 素 。 我 需 要 創(chuàng) 建 兩 個(gè) 元 素 : references 元 素 將 告 訴nant 需 要 為 該 項(xiàng) 目 引 用哪 些 程 序 集 , sources 元 素 告 訴nant 要 在 生 成 過 程 中 包 含 哪 些 文 件 。 在 該 示例 中 , 我 引 用 了nunit.framework.dll 程 序 集 并 包 含 了hashtabletest.cs 文件 。 figure 8中 顯 示 了 完 整 的 生 成 文 件 。( 你 通 常 還 要 創(chuàng) 建 一 個(gè) 干 凈 的target,用 于 刪 除 生 成 的 文 件 , 但 為 了 簡(jiǎn) 潔 起 見 , 我 已

50、 經(jīng) 將 其 省 略 。 )要 生 成 該 文 件 ,我 需 要 轉(zhuǎn) 到 我 的 項(xiàng) 目 的 根 目 錄( 生 成 文 件 位 于 此 處 ),然 后從 該 位 置 執(zhí) 行nant.exe。如 果 生 成 成 功 ,你 可 以 在 該 應(yīng) 用 程 序 的bin 目 錄 中 找到.dll 和.pdb 文 件 。 盡 管 使 用nant 肯 定 不 像 在visual studio 中 單 擊build 那 樣 簡(jiǎn) 單 ,但 它 仍 然 是 一 種 非 常 強(qiáng) 大 的 工 具 ,可 用 于 開 發(fā) 按 自 動(dòng) 計(jì) 劃 運(yùn) 行的 生 成 過 程 。 nant 還 包 括 一 些 有 用 的 功 能

51、,例 如 能 夠 運(yùn) 行 單 元 測(cè) 試 或 者 復(fù) 制 附加 文 件 ( 這 些 功 能 沒 有 受 到 當(dāng) 前visual studio 生 成 過 程 的 支 持 ) 。nant 是一 個(gè) 開 放 源 代 碼 項(xiàng) 目 , 下 載 地 址 是 : http:/ 換 工 具我 已 經(jīng) 將 兩 個(gè) 獨(dú) 立 的 工 具 合 在 一 起 放 在 標(biāo) 題 “ 轉(zhuǎn) 換 工 具 ” 下 面 。這 兩 個(gè) 工 具 都非 常 簡(jiǎn) 單 ,但 又 可 能 極 為 有 用 。第 一 個(gè) 工 具 是asp.net 版 本 轉(zhuǎn) 換 器 ,它 可 用 于轉(zhuǎn) 換asp.net ( 虛 擬 目 錄 在 它 下 面 運(yùn) 行

52、) 的 版 本 。 第 二 個(gè) 工 具 是visual studio converter, 它 可 用 于 將 項(xiàng) 目 文 件 從visual studio .net 2002 轉(zhuǎn) 換 到visual studio .net 2003。當(dāng)iis 處 理 請(qǐng) 求 時(shí) ,它 會(huì) 查 看 正 在 請(qǐng) 求 的 文 件 的 擴(kuò) 展 名 ,然 后 基 于 該web 站 點(diǎn) 或 虛 擬 目 錄 的 擴(kuò) 展 名 映 射 , 將 請(qǐng) 求 委 派 給isapi 擴(kuò) 展 或 者 自 己 處 理 該 請(qǐng) 求 。這 正 是asp.net 的 工 作 方 式 ;將 為 所 有asp.net 擴(kuò) 展 名 注 冊(cè) 擴(kuò) 展 名 映 射 ,并將 這 些 擴(kuò) 展 名 映 射 導(dǎo) 向aspnet_isapi.dll。 這 種 工 作 方 式 是 完 美 無 缺 的 , 除 非 你安 裝 了asp.net 1.1 它 會(huì) 將 擴(kuò) 展 名 映 射 升 級(jí) 到 新 版 本 的aspnet_isapi.dll。當(dāng) 在asp.net 1.0 上 生 成 的 應(yīng) 用 程 序 試 圖 用1.1 版 運(yùn) 行 時(shí) , 這 會(huì) 導(dǎo) 致 錯(cuò) 誤 。要 解 決 該 問 題 , 可 以 將 所 有 擴(kuò)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論