《Visual C# NET程序設(shè)計基礎(chǔ)》課件009_第1頁
《Visual C# NET程序設(shè)計基礎(chǔ)》課件009_第2頁
《Visual C# NET程序設(shè)計基礎(chǔ)》課件009_第3頁
《Visual C# NET程序設(shè)計基礎(chǔ)》課件009_第4頁
《Visual C# NET程序設(shè)計基礎(chǔ)》課件009_第5頁
已閱讀5頁,還剩180頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章調(diào)試、測試與程序的打包、部署9.1調(diào)試簡介 9.2測試簡介 9.3程序的打包和部署

9.4綜合案例:簡易計算器制作、測試、打包和部署

本章小結(jié)

練習(xí)與作業(yè)

上機(jī)部分(九)

學(xué)習(xí)目標(biāo)●理解如何調(diào)試應(yīng)用程序和排除錯誤●掌握如何測試C#應(yīng)用程序●了解測試和調(diào)試的區(qū)別●掌握Help類及其使用方法●掌握HelpProvider控件的使用方法●掌握各種部署應(yīng)用程序的方法9.1調(diào)試簡介

每當(dāng)提及我們?yōu)樘岣哕浖|(zhì)量做了多少工作時,開發(fā)人員總會拍胸脯保證沒有問題。然而,你要永遠(yuǎn)記住一個不爭的事實:程序中可能始終存在缺陷,代碼中存在錯誤也是難免的。畢竟,程序是人設(shè)計的,無論程序員有多么優(yōu)秀,程序可能總有一些問題。因此,調(diào)試、修復(fù)缺陷成為系統(tǒng)開發(fā)最耗時、最昂貴的過程,尤其是在大型軟件開發(fā)過程中。我們將搜索和消除錯誤的過程稱為調(diào)試。

調(diào)試是軟件開發(fā)過程中最艱巨的腦力勞動。調(diào)試開始時,軟件開發(fā)者僅僅面對著錯誤的征兆,然而在問題的外部現(xiàn)象和內(nèi)在原因之間往往并沒有明顯的聯(lián)系,在組成程序的密密麻麻的元素中,每一個都可能是錯誤的根源。如何能在浩如煙海的程序元素中找到有錯誤的那個(或幾個)元素,這是調(diào)試過程中最關(guān)鍵的技術(shù)問題。9.1.1調(diào)試的必要性

什么是缺陷呢?如果你的應(yīng)用程序安裝在任何機(jī)器上都會崩潰,你就會知道程序肯定有缺陷。發(fā)布后的系統(tǒng)有無缺陷呢?你可能聽說過,應(yīng)用程序的用戶抱怨說程序沒有正常工作時,這就發(fā)生了比較微妙的錯誤。例如,在一個大型電費管理信息系統(tǒng)的運行中,操作員月末統(tǒng)計出的多張報表,發(fā)現(xiàn)相互矛盾的數(shù)據(jù);當(dāng)去圖書館借書,發(fā)現(xiàn)需要的圖書已全部被別人借走時,你希望圖書館管理人員幫助你“預(yù)約借書”,可她操作后,計算機(jī)系統(tǒng)卻顯示“預(yù)約不成功”,然后終止應(yīng)用程序。

實際上,我們把許多不同類型的問題都稱為缺陷。數(shù)據(jù)被破壞是其中級別最高的,但是應(yīng)用程序由于設(shè)計缺陷或者甚至界面設(shè)計混亂也會導(dǎo)致用戶操作上的一些不方便(即不符合用戶的習(xí)慣或不符合約定俗成)。例如:你在MicrosoftOutlook中使用快捷鍵Ctrl+F,彈出的可能不是預(yù)期的查找窗口,而是轉(zhuǎn)發(fā)窗口(在幾乎所有的應(yīng)用程序中,快捷鍵Ctrl+F都會調(diào)出查找窗口)。

軟件系統(tǒng)的開發(fā)包括一系列生產(chǎn)活動,其中由人帶來的錯誤因素非常多。程序代碼編寫完成后,可能你的程序不能正常執(zhí)行;程序執(zhí)行后,可能還存在不影響應(yīng)用程序執(zhí)行的小問題,例如按鈕的拼寫錯誤等,它們也可能是導(dǎo)致應(yīng)用程序完全失敗的大錯誤(通常稱為致命錯誤),致命錯誤包括妨礙代碼編譯的簡單錯誤(語法錯誤),但更多的錯誤比較棘手,它們只在運行期間發(fā)生。另外,錯誤可能會更微妙。如果遺漏了一個請求的字段,應(yīng)用程序就不能給數(shù)據(jù)庫添加一個記錄;或者在其他有限制的環(huán)境中把錯誤的數(shù)據(jù)添加到記錄中,應(yīng)用程序邏輯在某些方面有瑕疵時,就會產(chǎn)生這樣的錯誤,這類錯誤稱為語義錯誤(也稱為邏輯錯誤)。此時需要跟蹤代碼,試著確定發(fā)生了什么問題,應(yīng)如何修改代碼,使之按希望的那樣去做。

程序產(chǎn)生的錯誤分為以下三種:

(1)語法錯誤。因程序設(shè)計人員對程序設(shè)計語言的理解不夠,或程序設(shè)計基本功不扎實造成的錯誤。程序員在編碼時不遵循語法規(guī)則時,就產(chǎn)生語法錯誤,發(fā)生語法錯誤后編譯不能通過。比如,在C#要求每行代碼的行末必須加分號,漏掉分號被視為語法錯誤。

(2)運行時錯誤。當(dāng)應(yīng)用系統(tǒng)運行時,操作員試圖執(zhí)行無法實施的錯誤時,會產(chǎn)生運行時錯誤。比如,在程序運行過程中用0作除數(shù),這種情況就會產(chǎn)生運行時錯誤。

(3)邏輯錯誤。是指那些雖然不違反系統(tǒng)規(guī)則,但是卻不合邏輯或不合題目語義的錯誤。這些錯誤系統(tǒng)一般很難自行檢測出來,比如統(tǒng)計報表數(shù)據(jù)出錯等。表9-1列出了不同錯誤類型的對比。

表9-1不同錯誤類型的對比9.1.2調(diào)試過程

在調(diào)試模式下運行程序時,并不僅僅是運行編寫好的代碼。調(diào)試程序包含了應(yīng)用程序的符號信息,這些信息包含在.pdb文件中,這些文件位于計算機(jī)的Debug目錄下。它們可以執(zhí)行許多有用的操作,包括(但不限于這些操作):

●給VS調(diào)試信息;

●在執(zhí)行應(yīng)用程序的過程中,查看(并編輯)變量的值;

●暫停程序、重新啟動程序;

●在代碼的某個位置自動暫停程序的執(zhí)行;

●一次執(zhí)行程序中的一行代碼;

●在應(yīng)用程序的執(zhí)行過程中,監(jiān)視變量內(nèi)容的修改;

●在運行期間修改變量的內(nèi)容;

●測試函數(shù)的測試調(diào)用。

在VS中,應(yīng)用程序可以處于運行狀態(tài),也可以處于中斷模式,即暫停正常的執(zhí)行。很多程序員常常調(diào)用輸出函數(shù)(如Console.WriteLine()等)來獲得操作的額外反饋消息。這是一種有效的調(diào)試技術(shù),但麻煩的是,一旦找到問題,必須從代碼中刪除這些輸出函數(shù)的調(diào)用,這是一個相當(dāng)繁瑣的工作。

為簡化此過程,VisualStudio提供了調(diào)試器。VisualStudio調(diào)試器是一個功能強(qiáng)大的工具,它使您可以觀察程序的運行時行為并確定邏輯錯誤的位置。該調(diào)試器可用于所有的VisualStudio編程語言及其關(guān)聯(lián)的庫。使用調(diào)試器,可以中斷(或掛起)程序的執(zhí)行以檢查代碼,計算和編輯程序中的變量,查看寄存器,查看從源代碼創(chuàng)建的指令,以及查看應(yīng)用程序所占用的內(nèi)存空間。VisualStudio還提供了新功能“編輯并繼續(xù)”,使用此功能您可以在調(diào)試時對代碼進(jìn)行更改,然后繼續(xù)執(zhí)行。

VisualStudio調(diào)試器提供了一個用于訪問調(diào)試器工具的“調(diào)試”菜單。調(diào)試器的窗口和對話框顯示有關(guān)您的程序的信息,并允許您輸入附加的信息。您可以通過按F1鍵獲得關(guān)于任何窗口或?qū)υ捒虻膸椭!罢{(diào)試”菜單如圖9-1所示。

圖9-1“調(diào)試”菜單

使用調(diào)試器,我們可以在源代碼行或函數(shù)上設(shè)置斷點,斷點通知調(diào)試器應(yīng)在某點上中斷應(yīng)用程序并暫停執(zhí)行。這時程序員可以做一些檢查,比如檢查變量的值,如需要還可以修改變量的值,也可以檢查其他情況。當(dāng)程序調(diào)試時,從菜單中選擇“調(diào)試”→“啟動調(diào)試”。這樣就在調(diào)試器中啟動了程序,并因而激活了斷點。一旦程序遇到斷點,調(diào)試器便會接收程序的控制。這時會有一個箭頭指向當(dāng)前執(zhí)行的行。要單步調(diào)試一行代碼,可以選擇“調(diào)試”→“逐語句”,并觀察光標(biāo)是否移到下一行?!罢{(diào)試”→“逐過程”命令允許您單步執(zhí)行將要調(diào)用的函數(shù)。

提示:F5是啟動調(diào)試的快捷鍵。

在VisualStudio2005中設(shè)置簡單斷點可通過快捷菜單和通過“調(diào)試”菜單兩種方法進(jìn)行。

1.通過快捷菜單設(shè)置簡單斷點

(1)在源代碼窗口中,單擊要設(shè)置斷點的那行可執(zhí)行代碼。

(2)在快捷菜單中,轉(zhuǎn)到“斷點”,然后選擇“插入斷點”,如圖9-2所示。程序運行遇到斷點時,會在設(shè)置斷點所在的代碼行暫停運行,如圖9-3所示。

提示:F9是插入斷點的快捷鍵。圖9-2通過快捷菜單設(shè)置簡單斷點圖9-3程序在斷點處暫停運行2.通過“調(diào)試”菜單設(shè)置簡單斷點

(1)在源窗口中,單擊要設(shè)置斷點的那行可執(zhí)行代碼。

(2)從“調(diào)試”菜單中選擇“切換斷點”。如圖9-4所示。普通斷點標(biāo)志符號說明如下::實心標(biāo)志符號指示斷點已啟用;空心標(biāo)志符號指示斷點已禁用。圖9-4通過“調(diào)試”菜單設(shè)置簡單斷點9.1.3VisualStudio.NET中的調(diào)試工具

調(diào)試器提供了很多變量窗口,這些窗口用于顯示、計算和編輯變量與表達(dá)式。每個變量窗口都是網(wǎng)格窗口,其中包含三列:“名稱”、“值”和“類型”。“名稱”列包含變量名稱或表達(dá)式。“值”和“類型”列顯示變量或表達(dá)式的值和數(shù)據(jù)類型。可在調(diào)試過程使用的變量窗口包括:“局部變量”窗口、“自動”窗口、“監(jiān)視”窗口、“快速監(jiān)視”窗口和“即時”窗口。

調(diào)試程序時,從菜單中選擇“調(diào)試”→“窗體”→“監(jiān)視(W)”→“監(jiān)視1”,即可顯示“監(jiān)視1”窗口,如圖9-5所示。類似地,可顯示其他變量窗口。圖9-5顯示變量窗口

下面分別說明這幾個窗口。

1.“局部變量”窗口顯示對于當(dāng)前上下文或范圍來說位于當(dāng)前作用域的變量。通常,這是當(dāng)前正在執(zhí)行的過程或函數(shù)。調(diào)試器自動填充此窗口。在VisualC#中,如果禁用了異常助手,一旦出現(xiàn)活動異常,則“局部變量”窗口還會顯示偽變量$exception,用以查看異常的詳細(xì)信息。圖9-6所示為“局部變量”窗口。當(dāng)程序執(zhí)行從一個方法轉(zhuǎn)向另一個方法時,“局部變量”窗口中顯示的變量也會改變,只顯示局部變量。可以修改字符串和數(shù)值變量的值,當(dāng)值被改變后,新值顯示為紅色,應(yīng)用程序?qū)⑹褂眯轮道^續(xù)執(zhí)行。圖9-6“局部變量”窗口

2.“自動”窗口

顯示在當(dāng)前代碼行和上一代碼行中使用的變量。對于本機(jī)C++,“自動”窗口還顯示函數(shù)返回值。與“局部變量”窗口類似,“自動”窗口是由調(diào)試器自動填充的。圖9-7所示為“自動”窗口。

3.“監(jiān)視”窗口

在“監(jiān)視”窗口中可以添加被監(jiān)視值的變量。此外,還可以添加變量以外的其他內(nèi)容。您可以添加調(diào)試器所能識別的任何有效表達(dá)式。VisualStudio2005有多個“監(jiān)視”窗口,其編號為Watch1到Watch4。

執(zhí)行程序時,“監(jiān)視”窗口會自動跟蹤變量的值,如果被監(jiān)視的變量不在當(dāng)前執(zhí)行的方法內(nèi),將會顯示“操作符超出范圍”的錯誤。圖9-8所示為“監(jiān)視”窗口。圖9-7自動窗口圖9-8“監(jiān)視”窗口

4.“快速監(jiān)視”窗口

“快速監(jiān)視”在概念上類似于“監(jiān)視”窗口,但是“快速監(jiān)視”每次只能顯示一個變量或表達(dá)式。如果需要快速查看變量或表達(dá)式而不想打開“監(jiān)視”窗口,則可以使用“快速監(jiān)視”。但是,很多用戶會發(fā)現(xiàn)新的增強(qiáng)的數(shù)據(jù)提示功能強(qiáng)大,以至于他們越來越少地使用到“快速監(jiān)視”。圖9-9所示為“快速監(jiān)視”窗口。

雖然“快速監(jiān)視”是對話框,但其工作方式很像其他變量窗口。除了特別指出的不同之處以外,這一節(jié)所描述的過程適用于“快速變量”對話框以及其他變量窗口。圖9-9“快速監(jiān)視”窗口

5.“即時”窗口

“即時”窗口可用于檢查變量的值、給變量賦值以及運行一行代碼。要查找變量的值,需要在變量前添加問號“?”,如圖9-10所示。要想改變變量的值,在此窗口鍵入賦值代碼,然后按下Enter鍵。調(diào)試器具有許多其他工具的功能。例如,可以使用“寄存器”窗口顯示寄存器的內(nèi)容,還可以獲得內(nèi)存轉(zhuǎn)儲和關(guān)于進(jìn)程中線程的信息。下面介紹VisualStudio2005中編譯調(diào)試新功能“可視化調(diào)試器”。圖9-10“即時”窗口6.可視化調(diào)試器(DebuggingVisualizers)

在調(diào)試的時候,我們常會遇到的較麻煩的問題,就是有的時候很難看到某些參數(shù)的值。比如,你設(shè)置了一個斷點去監(jiān)測一個DataSet,并且想看DataSet里的每個DataTable的數(shù)據(jù),這在VisualStudio2003中是十分麻煩的,必須在“自動/局部變量”的監(jiān)視窗口中,一層層地展開去看其值。在VisualStudio2005中,為解決這個問題,新增加了“可視化調(diào)試器”的功能,該功能可以在調(diào)試狀態(tài)時,很容易方便地以各類形式查看各種參數(shù)。

在各類監(jiān)視窗口中,比如在“局部變量”窗口、“自動”窗口、“監(jiān)視”窗口、“快速監(jiān)視”窗口中,都可以調(diào)用可視化調(diào)試器,方法是在某個需要監(jiān)視的參數(shù)旁邊,點擊放大鏡圖標(biāo),就可以在打開的可視化調(diào)試器中看到該參數(shù)的詳細(xì)情況,如圖9-11所示。

利用可視化調(diào)試器,就可以很方便地查看諸如DataSet類型的數(shù)據(jù)。圖9-11“可視化調(diào)試器”窗口9.1.4實例1:在VS.NET2005中調(diào)試程序

使用VS.NET2005的“編輯并繼續(xù)”功能,可以一邊進(jìn)行調(diào)試一邊在中斷模式下更改代碼。不必停止并重新啟動調(diào)試會話,即可應(yīng)用更改。

(1)使用C#建立一個WinForms的應(yīng)用程序,命名為Debug。

(2)為窗體添加如表9-2所示的控件。程序主界面如圖9-12所示。我們要實現(xiàn)的功能是,在文本框輸入一些信息后,點按鈕,會彈出一個消息框,顯示的是剛才輸入的信息。表9-2窗體的控件列表圖9-12程序主界面

(3)編寫的代碼如下所示,假設(shè)我們出現(xiàn)了一個小錯誤,把textbox1.text的內(nèi)容當(dāng)作字符串的一部分了,所以顯示不出用戶輸入的信息。

privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show("WelcometextBox1.TexttoEditandContinue.");}

現(xiàn)在,如果我們在調(diào)試時遇到了這個錯誤,則可以使用“編輯并繼續(xù)”功能來進(jìn)行改正。

(4)按F7鍵切換到代碼視圖,在MessageBox.Show這一行設(shè)置斷點。

(5)按F5鍵運行程序,當(dāng)在文本框輸入字符串時,由于設(shè)置了中斷,光標(biāo)停留在MessageBox.Show這一行上。

(6)修改代碼:

privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show("Welcome"+textBox1.Text+"toEditandContinue!");}(7)

按F5鍵繼續(xù)運行。將顯示正確的結(jié)果,而不需要使用以往的“停止調(diào)試”的功能,即先停止調(diào)試,再修改程序。

9.2測試簡介

測試是檢查應(yīng)用程序以確保它滿足設(shè)計要求并滿足質(zhì)量期望值的過程。

測試可以完成許多事,但最重要的是可以衡量正在開發(fā)的軟件的質(zhì)量。這種觀點預(yù)先假定軟件中存在等待被發(fā)現(xiàn)的缺陷,并且這種觀點很少被反駁,甚至也不存在爭議。

開發(fā)周期中,越早使測試成為投入的一部分越好。規(guī)劃對于成功的測試投入至關(guān)重要,部分是因為它在設(shè)置預(yù)期值方面需要做大量的工作。在測試計劃中考慮預(yù)算、日程和性能可以增加測試確實發(fā)生的可能性,并且高效實惠。規(guī)劃還確保不會忘記或重復(fù)測試,除非重復(fù)測試對于回歸測試是必要的。

VisualStudioTeamEditionforTesters中提供了一套與MicrosoftVisualStudio2005緊密集成的測試工具。這些工具不僅能在自身的測試框架中工作,還可在軟件生命周期工具的更大框架中發(fā)揮作用。

TeamEditionforTesters使您能夠創(chuàng)建、管理、編輯和運行測試,還可以獲取和存儲測試結(jié)果。除代碼覆蓋率度量外,VisualStudio中還集成了幾種測試類型,其中包括:

●單元測試:單元測試調(diào)用類的方法(傳遞參數(shù)),并驗證返回值是否為期望的值。既可以手動編寫單元測試,也可以自動生成它們。

Web測試:Web測試由您使用MicrosoftInternetExplorer在一個瀏覽器會話中記錄的一系列有序的HTTP請求組成。也可以創(chuàng)建一個編碼Web測試,并在其中添加更多高級功能,例如流控制。可以讓測試報告有關(guān)它所請求的頁或站點的特定細(xì)節(jié),例如某個特定的頁是否包含指定的字符串。

●在記錄Web測試之后,可以對它進(jìn)行編輯以分配一些屬性,例如思考時間和數(shù)據(jù)源(用于存儲要發(fā)送到Web服務(wù)器的數(shù)據(jù))。Web測試在用作負(fù)載測試的一部分時功能會變得更為強(qiáng)大。

●負(fù)載測試:可以使用負(fù)載測試來封裝非手動測試(即,單元測試、Web測試、一般測試和順序測試),然后使用虛擬用戶同時運行它們。在負(fù)載下運行這些測試將生成測試結(jié)果,包括用表格和圖形方式顯示的性能計數(shù)器和其他計數(shù)器。

例如,通過將Web測試添加到負(fù)載測試,可以模擬數(shù)百個用戶與某個特定的Web應(yīng)用程序同時進(jìn)行交互的情形。這可以讓您在部署Web應(yīng)用程序之前,測試其在峰值使用情況下的行為,以便找出應(yīng)用程序的錯誤或瓶頸。

●手動測試:手動測試可用于逐句通過任務(wù),通常適用于那些很難或無法自動運行的測試,例如計算機(jī)與其電源之間的連接已中斷的測試。當(dāng)需要由測試工程師而非自動腳本來完成測試任務(wù)時,應(yīng)使用此測試類型。

可以使用VisualStudioIDE運行測試。此外,還可以從命令行運行手動測試之外的測試組或任何單項測試。

因為測試工具與VisualStudioTeamSystem的其他部分集成在一起,所以可以將結(jié)果發(fā)布到數(shù)據(jù)庫,生成趨勢和歷史記錄報告,對比不同種類的數(shù)據(jù),查看通過測試發(fā)現(xiàn)了多少bug(指軟件中存在的錯誤)及具體都有哪些錯誤。

下面介紹TeamSystemtestingtools的一些基本內(nèi)容,包括如何創(chuàng)建和使用測試,可用的測試類型以及如何配置測試工具等。

1.先決條件

如果你是測試人員,可以通過選擇測試人員配置文件設(shè)置啟動VisualStudio。方法如下:

(1)首次啟動VisualStudio2005時,將出現(xiàn)“選擇默認(rèn)環(huán)境設(shè)置”對話框,如圖9-15所示。

(2)單擊“TeamTest設(shè)置”。

(3)單擊“啟動VisualStudio”。(4)

啟動后將顯示“測試管理器”,如圖9-13所示。

注意:如果啟動VisualStudio時沒有出現(xiàn)圖9-13所示對話框,請打開運行命令“開始”→“運行”,鍵入devenv/resetuserdata,再按回車(如圖9-14所示)。然后再次啟動VisualStudio,即可出現(xiàn)“選擇默認(rèn)環(huán)境設(shè)置”對話框(如圖9-15所示)。圖9-13選擇“TeamTest設(shè)置”后的VS界面圖9-14“運行”窗口圖9-15“選擇默認(rèn)環(huán)境設(shè)置”窗口

這樣使用測試人員配置文件啟動VisualStudio之后,將移除某些特定于編程的菜單和窗口,使測試員可以集中精力執(zhí)行以下任務(wù):創(chuàng)建非編程測試,管理現(xiàn)有測試及運行測試。

下面講述進(jìn)行測試的一般步驟:

(1)創(chuàng)建測試項目。

(2)創(chuàng)建新測試,進(jìn)行測試環(huán)境的設(shè)置。選擇測試類型,比如單元測試、Web測試、負(fù)載測試。

(3)打開測試進(jìn)行編輯測試。

(4)運行測試。

(5)測試運行之后,需要記錄測試結(jié)果。

對于單元測試,在第(3)步時,需要“創(chuàng)作單元測試”;對于Web測試,第(3)步時需要“記錄Web測試”。

2.創(chuàng)建測試項目

創(chuàng)建測試項目的常用方法有以下三種:

●添加測試時創(chuàng)建測試項目。新建測試時,可以新建一個要向其中添加測試的測試項目,也可以將測試添加到現(xiàn)有的測試項目中。

●在生成單元測試時創(chuàng)建測試項目。生成單元測試時,可以新建一個要向其中添加測試的測試項目,也可以將測試添加到現(xiàn)有的測試項目中。

●使用“添加新項目”對話框。使用此方法,可以選擇測試項目的編程語言,如果計劃編寫測試代碼(如在單元測試或編碼Web測試中),則編程語言的選擇就可能很重要。1)添加測試時創(chuàng)建測試項目

(1)單擊“測試”→“新建測試”。隨即出現(xiàn)“添加新測試”對話框。如圖9-16所示。

(2)在“添加到測試項目”下,選擇用于創(chuàng)建新測試項目的選項之一。例如,單擊“創(chuàng)建新VisualC#測試項目”。如圖9-17所示。

(3)在“模板”窗格中,選擇要添加的測試類型,單擊“確定”。

(4)隨即出現(xiàn)“新建測試項目”對話框。輸入新測試項目的名稱或接受默認(rèn)名稱,然后單擊“創(chuàng)建”,如圖9-18所示。測試項目及其包含的測試將添加到解決方案中。圖9-16“新建測試”菜單圖9-17“添加新測試”窗口圖9-18“新建測試項目”對話框2)在生成單元測試時創(chuàng)建測試項目

(1)打開一個源代碼文件。

(2)右擊某命名空間、類或方法,在彈出菜單中單擊“創(chuàng)建單元測試”,如圖9-19所示。

(3)隨即出現(xiàn)“創(chuàng)建單元測試”對話框??梢愿囊獮槠渖蓡卧獪y試的選定成員。在“輸出項目”下,選擇用于創(chuàng)建新測試項目的選項之一。例如,單擊“創(chuàng)建新的VisualC#?測試項目”,如圖9-20所示。

(4)單擊“生成”。隨即出現(xiàn)“新建測試項目”對話框。

(5)輸入新測試項目的名稱或接受默認(rèn)名稱,然后單擊“創(chuàng)建”。該測試項目以及新單元測試將添加到解決方案中。圖9-19“創(chuàng)建單元測試”菜單圖9-20“創(chuàng)建單元測試”對話框3)使用“添加新項目”對話框創(chuàng)建測試項目

(1)在“解決方案資源管理器”中右擊解決方案,指向“添加”,然后單擊“新建項目”。

(2)出現(xiàn)“添加新項目”對話框。“項目類型”窗格包含一個“測試項目節(jié)點”和多個特定編程語言節(jié)點。如果希望新測試項目使用特定編程語言,請展開該語言的節(jié)點;否則,展開“測試項目”。如果展開了一個語言節(jié)點,則單擊“測試”;如果展開了“測試項目”節(jié)點,則單擊“測試文檔”,如圖9-21所示。

(3)在“模板”之下單擊“測試項目”。

(4)單擊“確定”。測試項目將添加到解決方案中。圖9-21“添加新項目”對話框

3.生成單元測試

在生成單元測試時,為在“創(chuàng)建單元測試”對話框中選擇的每個碼方法創(chuàng)建一個單元測試方法。生成的每個單元測試調(diào)用Inconclusive方法,由于測試未實現(xiàn),這將使測試失敗。下一步是添加有意義的代碼以檢測所測試的方法是否正確運行,從而實現(xiàn)測試。

下面介紹生成單元測試的步驟:

(1)有四種方法可以生成單元測試。

●在解決方案資源管理器中右擊某個測試項目,指向“添加”,再單擊“單元測試”。

●在解決方案資源管理器中右擊某個測試項目,指向“添加”,再單擊“新建測試”。在“添加新測試”對話框中單擊“單元測試向?qū)А保賳螕簟按_定”。

●在“測試管理器”窗口或“測試視圖”窗口中右擊窗口圖面,再單擊“新建測試”。在“添加新測試”對話框中單擊“單元測試向?qū)А保賳螕簟按_定”。

●在VisualStudio代碼編輯器中,右擊要測試的命名空間、類或方法并選擇“創(chuàng)建單元測試”(如圖9-19所示)。

(2)將顯示“創(chuàng)建單元測試”對話框(如圖9-20所示)。為選定的所有成員或類生成單元測試,并可以選擇要在其中放置生成的單元測試的項目。

(3)

(可選)單擊“篩選器”可更改顯示的類和成員層次結(jié)構(gòu)的內(nèi)容。

(4)

(可選)通過選中其復(fù)選框選擇其他代碼元素。

(5)

(可選)單擊“設(shè)置”可更改此測試的生成配置設(shè)置。例如,可以為要生成的測試文件、類和方法更改默認(rèn)的命名選項。

(6)單擊“確定”。

4.編輯單元測試

編輯單元測試的原因有兩個:您正在手動創(chuàng)作一個單元測試;或者正在編輯一個新生成的單元測試。雖然您可以運行新生成的單元測試,但是由于它們是使用默認(rèn)內(nèi)容創(chuàng)建的,為了使測試能夠產(chǎn)生有意義的結(jié)果,必須使用適當(dāng)?shù)闹祵δJ(rèn)內(nèi)容進(jìn)行初始化。

在生成的單元測試中,通常需要自定義變量的賦值以及一個或多個Assert語句。

(1)在單元測試中使用Assert語句。

默認(rèn)情況下,每個生成的單元測試都調(diào)用Inconclusive方法,這會導(dǎo)致測試失敗,因為測試實際上仍未實現(xiàn)。下一步是添加有意義的代碼,以檢查所測試的方法的操作是否正確。實現(xiàn)該目的的典型方法是生成一個值,然后使用Assert.AreEqual語句將該值與預(yù)期值進(jìn)行比較。

不包含Assert語句的單元測試只要不超時,并且不引發(fā)意外的異常,就會自動通過。這是單元測試框架不包含Assert.Pass語句的原因。

(2)編輯現(xiàn)有單元測試。

●在解決方案資源管理器中的測試項目中,找到并打開包含該單元測試的文件,然后找到要編輯的單元測試方法,如圖9-22所示。圖9-22單元測試文件

●在方法中找到變量賦值部分,為每個變量賦給相應(yīng)的值。

對于新生成的測試,將使用“To-Do”語句標(biāo)記變量賦值部分,旨在提醒您需要自定義這些賦值語句。例如,以下便是需要編輯的一個典型的賦值語句:

stringtarget.owner=null;//TODO:Initializetoanappropriatevalue

若要了解什么樣的值才是適當(dāng)?shù)模瑧?yīng)考慮以下幾個方面:在調(diào)用方法之前這些變量可能被初始化為的值;在調(diào)用方法時這些變量值可能發(fā)生的更改以及期望的結(jié)果。

(3)在方法中查找并編輯Assert語句。如果需要,添加其他Assert語句。

Assert.AreEqual(期望值,實際運行結(jié)果,錯誤信息);

5.運行單元測試

(1)在“測試視圖”中選擇需要測試的項目,單擊右鍵,在彈出的菜單中單擊“運行選中的測試”;如圖9-23所示。

(2)在“測試結(jié)果”窗口的“結(jié)果”列中,當(dāng)測試運行時,測試狀態(tài)將顯示為“正在運行”。測試運行完成后,測試的結(jié)果將更改為“通過”,如圖9-24所示。

(3)如測試“未通過”,可在“測試結(jié)果”窗口中雙擊表示測試的行,將打開“測試結(jié)果詳細(xì)信息”頁,其中顯示以下錯誤消息:“Assert.AreEqual失敗。期望值:<...>,實際值:<...>”。

此時需要檢查被測試的方法。圖9-23運行選中的測試圖9-24“測試結(jié)果”窗口【例9-1】使用VS2005進(jìn)行銀行項目的單元測試。

(1)使用C#建立一個“類庫”,命名為Bank。

(2)

在Class1.es類文件中編寫下列代碼:

usingSystem;

namespaceBankAccountNS

{

publicclassBankAccount

{

privatestringm_customerName;

privatedoublem_balance;

publicBankAccount(stringcustomerName,doublebalance){m_customerName=customerName;m_balance=balance;}publicstringCustomerName{get{returnm_customerName;}}publicdoubleBalance{get{returnm_balance;}}//借:取款;模擬編碼人員邏輯錯誤

publicvoidDebit(doubleamount){if(amount<0){thrownewArgumentOutOfRangeException("amount");}m_balance+=amount;}//貸:存款;模擬編碼人員邏輯錯誤

publicvoidCredit(doubleamount){if(amount>m_balance){thrownewArgumentOutOfRangeException("amount");}m_balance-=amount;}publicstaticvoidMain(){BankAccountba=newBankAccount("Mr.BryanWalton",11.99);ba.Credit(5.77);ba.Debit(11.22);Console.WriteLine("Currentbalanceis${0}",ba.Balance);}}}

下面我們來進(jìn)行借、貸兩個方法的單元測試:

(3)在Class1.cs文件的“BankAccount”類中,滾動到“Debit()”方法。右擊“Debit()”方法,并選擇“創(chuàng)建單元測試”(如圖9-19所示)。

(4)這時將顯示“創(chuàng)建單元測試”對話框。在程序集的類和成員層次結(jié)構(gòu)樹中,選擇“Debit()”方法。并選擇“Credit()”方法(如圖9-20所示)。

對于“輸出項目”,單擊“創(chuàng)建新的VisualC#測試項目”。然后在“生成單元測試”對話框中單擊“確定”。

(5)

在“新建測試項目”對話框中接受默認(rèn)名稱,然后單擊“創(chuàng)建”(如圖9-21所示)。這時將創(chuàng)建一個名為TestProject1的項目,該項目將顯示在解決方案資源管理器中。(6)

選中Class1Tests.cs中,為要測試的變量指定值。然后滾動到“DebitTest”方法。在此可以看到指示要設(shè)置的變量(即“customerName”、“balance”和“amount”)的三個//TODO行。復(fù)制代碼:

publicvoidDebitTest(){stringcustomerName="Mr.BryanWalton";//客戶名

doublebalance=11.99;//帳戶余額

doubleamount=11.22;

//新建立一個帳戶:戶名,帳戶金額11.99BankAccounttarget=newBankAccount(customerName,balance);//取款11.22target.Debit(amount);Assert.Inconclusive("無法驗證不返回值的方法。");}

應(yīng)使用什么值?若要回答此問題,必須知道應(yīng)用程序運行時要使用的值。

上述代碼首先新建立一個帳戶:戶名"Mr.BryanWalton",帳戶金額11.99;取款11.22后,帳戶金額應(yīng)為0.77。(7)

修改“Assert”語句的測試方法。替換代碼:

publicvoidDebitTest()

{

…//修改前

//Assert.Inconclusive("無法驗證不返回值的方法。");//修改后

Assert.AreEqual((System.Convert.ToDouble(0.77)),target.Balance,0.05);}

此語句將預(yù)期結(jié)果(0.77)

與調(diào)用“BankAccount”類的“Balance”方法所產(chǎn)生的實際結(jié)果進(jìn)行比較。如果兩個值不相等,則“Assert”返回“False”,從而使測試失敗。

注意:此“Assert”語句還包括第三個參數(shù)“delta”,其值為0.05。在“Assert.AreEqual”方法的此重載中需要該delta參數(shù);它可以補(bǔ)償“Doubles”等浮點型所固有的舍入錯誤。

(8)運行和自定義單元測試。使用“測試管理器”窗口或“測試視圖”窗口運行DebitTest單元測試。

在“測試結(jié)果”窗口的“結(jié)果”列中,測試狀態(tài)將顯示為“正在運行”,如圖9-25所示。測試結(jié)束后,顯示CreditTest單元測試“通過”;DebitTest單元測試“失敗”;需要對DebitTest方法進(jìn)行調(diào)試、修改。圖9-25測試結(jié)果9.3

程序的打包和部署9.3.1幫助文件的制作

完善用戶幫助系統(tǒng)可以增加軟件的易用性,以便用戶更快、更方便、更容易使用幫助系統(tǒng)進(jìn)行自我學(xué)習(xí)或排除疑惑。

只有包含幫助文件,應(yīng)用系統(tǒng)才能稱得上是完整的系統(tǒng)。

VisualStudio提供了對兩種不同幫助系統(tǒng)的支持:

●傳統(tǒng)的Windows幫助系統(tǒng)(WinHelp);

HTML幫助(CHM幫助)。

目前chm格式的幫助文件已經(jīng)成為主流。

可以使用HTMLHelpWorkshop提供的工具創(chuàng)建HTMLHelp聯(lián)機(jī)幫助系統(tǒng)。另外,也可使用第三方工具對HTMLHelp文件進(jìn)行編輯和編譯。

1.Help類

應(yīng)用程序可使用Help對象,以HTML幫助的格式顯示已編譯的幫助文件(.chm)或HTML文件。

無法創(chuàng)建Help類的新實例。若要為應(yīng)用程序提供“幫助”,請調(diào)用靜態(tài)ShowHelp和ShowHelpIndex方法。

ShowHelp方法用于顯示指定URL處的幫助文件的“目錄”選項卡,其語法如下:

Help.ShowHelp(Controlparent,Stringurl)

其中,parent參數(shù)標(biāo)識要顯示的幫助文件的父級控件;url參數(shù)為幫助文件的路徑和名稱。url可以是文件URL(如d:\appHelp.htm),也可以是HTTPURL(如http://appHelp.htm)。【例9-2】顯示幫助文件。

(1)新建一個Windows應(yīng)用程序,將其名稱設(shè)置為Demo9-2。

(2)將默認(rèn)創(chuàng)建的窗體名稱設(shè)置為frm9_2,將窗體的標(biāo)題設(shè)置為“范例9-2”。

(3)在主窗口中添加一個Button控件。將Button控件的Name屬性設(shè)置為“showHelp”,Text屬性設(shè)置為“幫助信息”。

(4)在showHelp控件的Click事件中編寫下列代碼:

privatevoidshowHelp_Click(objectsender,System.EventArgse)

{

Help.ShowHelp(this,@".\calc.chm")}(5)

保存項目,并“生成解決方案”。

(6)將C:\WINDOWS\Help目錄下的calc.chm復(fù)制到該項目的子目錄\bin\Debug下。

(7)運行項目。

ShowHelpIndex方法“顯示幫助索引”用于顯示幫助文件的“索引”選項卡,其語法如下:

publicstaticvoidShowHelpIndex(Controlparent,stringurl)

其調(diào)用方法與ShowHelp相似。

【例9-3】

顯示幫助文件的“索引”選項卡。

(1)新建一個Windows應(yīng)用程序,將其名稱設(shè)置為Demo9-3。

(2)將默認(rèn)創(chuàng)建的窗體名稱設(shè)置為frm9_3,將窗體的標(biāo)題設(shè)置為“范例9-3”。

(3)在主窗口中添加一個Button控件。將Button控件的Name屬性設(shè)置為“showHelp”,Text屬性設(shè)置為“幫助信息”。

(4)在showHelp控件的Click事件中編寫下列代碼:

privatevoidshowIndex_Click(objectsender,System.EventArgse)

{

Help.ShowHelpIndex(this,@".\calc.chm")

}

(5)保存項目,并“生成解決方案”。

(6)將C:\WINDOWS\Help目錄下的calc.chm復(fù)制到該項目的子目錄\bin\Debug下。

(7)運行項目。2.HelpProvider組件

通過使用HelpProvider組件,可以將“幫助”文件(它為HTML或HTMLHelp1.x或更高版本的格式)內(nèi)的“幫助”主題附加到Windows窗體上的特定控件。

使用HelpProvider組件提供幫助的操作步驟是:

(1)將HelpProvider組件從“工具箱”拖到窗體上。該組件將位于Windows窗體設(shè)計器底部的欄中。

(2)在“屬性”窗口中,將HelpNamespace屬性設(shè)置為.chm、.col或.htm幫助文件。

(3)選擇窗體上的另一個控件,在“屬性”窗口中設(shè)置HelpKeyword屬性。這是通過HelpProvider組件傳遞給幫助文件的字符串,用于請求相應(yīng)的“幫助”主題。

(4)在“屬性”窗口中,將HelpNavigator屬性設(shè)置為HelpNavigator枚舉的值。這將確定以何種方式將HelpKeyword屬性傳遞給幫助系統(tǒng)。

表9-3顯示了可能的設(shè)置及其說明。

在運行時,如果當(dāng)已設(shè)置HelpKeyword和HelpNavigator屬性的控件在獲得焦點時按F1鍵,將打開與HelpProvider組件關(guān)聯(lián)的幫助文件。表9-3可能的設(shè)置及其說明9.3.2程序打包

(1)

.NETFramework提供以下應(yīng)用程序打包選項:

①作為單個程序集或者程序集集合。

如果選中該選項,則直接使用生成后的.dll或.exe文件。

②作為壓縮(CAB)文件。

如果選中該選項,則將文件壓縮為.cab文件,以縮短文件分發(fā)或下載的時間。

③作為MicrosoftWindowsInstaller2.0包或采用其他安裝程序格式。

如果選中該選項,則可以創(chuàng)建用于WindowsInstaller的

.msi文件,或者打包用于其他安裝程序的應(yīng)用程序。

(2)

.NETFramework提供以下應(yīng)用程序分發(fā)選項:

①使用XCOPY或FTP。

因為公共語言運行庫應(yīng)用程序是自描述的,并且不需要注冊表項,所以可以使用XCOPY或FTP僅將應(yīng)用程序復(fù)制到相應(yīng)的目錄中。然后,就可以從該目錄運行應(yīng)用程序。

②使用代碼下載。

如果通過Internet或公司Intranet分發(fā)應(yīng)用程序,則只要將代碼下載到計算機(jī)上并在該計算機(jī)上運行應(yīng)用程序即可。

③使用安裝程序,如WindowsInstaller2.0。

WindowsInstaller2.0可以安裝、修復(fù)或移除全局程序集緩存和私有目錄中的Microsoft.NETFramework程序集。

9.3.3程序部署

VisualStudio為部署基于Windows的應(yīng)用程序提供兩種不同的策略:

●使用ClickOnce技術(shù)發(fā)布應(yīng)用程序。

●使用WindowsInstaller技術(shù)通過傳統(tǒng)安裝來部署應(yīng)用程序。

通過ClickOnce部署,可以將應(yīng)用程序發(fā)布到中心位置,然后用戶再從該位置安裝或運行應(yīng)用程序;通過WindowsInstaller部署,可將應(yīng)用程序打包到setup.exe文件中,并將該文件分發(fā)給用戶,用戶可以運行setup.exe文件安裝應(yīng)用程序。

選擇部署策略時有幾個因素要考慮:應(yīng)用程序類型、用戶的類型和位置、應(yīng)用程序更新的頻率以及安裝要求。

大多數(shù)情況下,ClickOnce部署為最終用戶提供更好的安裝體驗,而要求開發(fā)人員花費的精力也少。但是,在某些情況下必須使用WindowsInstaller部署。

表9-4將ClickOnce部署的功能與WindowsInstaller部署的功能進(jìn)行了比較。

提示:VisualStudio中的部署工具旨在處理典型的企業(yè)部署需求,這些工具未涵蓋所有可能的部署方案。對于更高級的部署方案,可能需要考慮使用第三方部署工具或軟件分發(fā)工具,如SystemsManagementServer(SMS)。表9-4ClickOnce部署的功能與WindowsInstaller部署的功能比較表

1.通過ClickOnce部署

簡單來說,ClickOnce應(yīng)用程序就是任何使用ClickOnce技術(shù)發(fā)布的Windows窗體或控制臺應(yīng)用程序。可以采用三種不同的方法發(fā)布ClickOnce應(yīng)用程序:從網(wǎng)頁發(fā)布、從網(wǎng)絡(luò)文件共享發(fā)布以及從媒體(如CD-ROM)發(fā)布。ClickOnce應(yīng)用程序既可以安裝在最終用戶的計算機(jī)上并在本地運行(即使當(dāng)計算機(jī)脫機(jī)時也可以運行),也可以僅以聯(lián)機(jī)模式運行,而不在最終用戶的計算機(jī)上永久安裝任何內(nèi)容。

ClickOnce應(yīng)用程序可以自行更新;這些應(yīng)用程序可以在較新版本變?yōu)榭捎脮r檢查較新版本,并自動替換所有更新的文件。開發(fā)人員可以指定更新行為;網(wǎng)絡(luò)管理員也可以控制更新策略如將更新標(biāo)記為強(qiáng)制性的。最終用戶或管理員還可以對更新進(jìn)行回滾,使應(yīng)用程序恢復(fù)到早期的版本。

因為ClickOnce應(yīng)用程序在本質(zhì)上是被隔離的,所以安裝或運行ClickOnce應(yīng)用程序不會干擾現(xiàn)有的應(yīng)用程序。ClickOnce應(yīng)用程序是完全獨立的;每個ClickOnce應(yīng)用程序都安裝到一個安全的基于每個用戶、每個應(yīng)用程序的緩存中,并從該緩存運行。默認(rèn)情況下,ClickOnce應(yīng)用程序運行在Internet或Intranet安全區(qū)域中。如果有必要,應(yīng)用程序可以請求提升的安全權(quán)限。

下面講述如何發(fā)布ClickOnce應(yīng)用程序。

1)發(fā)布到Web

(1)在“解決方案資源管理器”中,選擇應(yīng)用程序項目。

(2)右擊項目節(jié)點,然后選擇“發(fā)布”,將出現(xiàn)“發(fā)布向?qū)А薄?/p>

(3)在“您要在哪里發(fā)布該應(yīng)用程序?”頁上,輸入一個有效的URL,然后單擊“下一步”。

(4)在“該應(yīng)用程序可以脫機(jī)使用嗎?”頁中,單擊適當(dāng)?shù)倪x項:

①如果要使應(yīng)用程序在用戶與網(wǎng)絡(luò)斷開連接時也可以運行,則單擊“是,該應(yīng)用程序可以聯(lián)機(jī)或脫機(jī)使用”?!伴_始”菜單上將創(chuàng)建應(yīng)用程序的快捷方式。

②如果要從發(fā)布位置直接運行應(yīng)用程序,則單擊“否,該應(yīng)用程序只能聯(lián)機(jī)使用”?!伴_始”菜單上不創(chuàng)建快捷方式。單擊“下一步”繼續(xù)。

(5)單擊“完成”以發(fā)布應(yīng)用程序。

發(fā)布狀態(tài)顯示在任務(wù)欄的狀態(tài)通知區(qū)域中。

2)發(fā)布到文件共享

(1)在“解決方案資源管理器”中,選擇應(yīng)用程序項目。

(2)在“生成”菜單上,單擊“發(fā)布Projectname”,將出現(xiàn)“發(fā)布向?qū)А薄?/p>

(3)在“您要在哪里發(fā)布該應(yīng)用程序?”頁上,使用格式“\\機(jī)器名\應(yīng)用程序名”輸入一個有效的文件路徑,然后單擊“下一步”。

(4)在“用戶如何安裝應(yīng)用程序?”頁中,選擇用戶安裝應(yīng)用程序的位置:

①如果用戶從網(wǎng)站安裝,則單擊“從網(wǎng)站”,并輸入與上一步中輸入的文件路徑相對應(yīng)的URL,然后單擊“下一步”(此選項通常在將FTP地址指定為發(fā)布位置時使用。從FTP的直接下載不受支持,因此需要在此處輸入URL)。

②如果用戶從文件共享直接安裝應(yīng)用程序,則單擊“從UNC路徑或文件共享”,然后單擊“下一步”(此選項用于形式為c:\deploy\myapp或\\server\myapp的發(fā)布位置)。

③如果用戶從可移動媒體安裝,則單擊“從CD-ROM或DVD-ROM”,然后單擊“下一步”。

(5)在“該應(yīng)用程序可以脫機(jī)使用嗎?”頁中,單擊適當(dāng)?shù)倪x項:

①如果要使應(yīng)用程序在用戶與網(wǎng)絡(luò)斷開連接時也可以運行,則單擊“是,該應(yīng)用程序可以聯(lián)機(jī)或脫機(jī)使用”。“開始”菜單上將創(chuàng)建應(yīng)用程序的快捷方式。

②如果要從發(fā)布位置直接運行應(yīng)用程序,則單擊“否,該應(yīng)用程序只能聯(lián)機(jī)使用”?!伴_始”菜單上不創(chuàng)建快捷方式。單擊“下一步”繼續(xù)。

(6)單擊“完成”以發(fā)布應(yīng)用程序。發(fā)布狀態(tài)顯示在任務(wù)欄的狀態(tài)通知區(qū)域中。

3)發(fā)布到CD-ROM或DVD=ROM

(1)在“解決方案資源管理器”中,右擊應(yīng)用程序項目并選擇“屬性”,將出現(xiàn)“項目設(shè)計器”。

(2)單擊“發(fā)布”選項卡,在“項目設(shè)計器”中打開“發(fā)布”頁,然后單擊【發(fā)布向?qū)А堪粹o,出現(xiàn)“發(fā)布向?qū)А薄?/p>

(3)在“您要在哪里發(fā)布該應(yīng)用程序?”頁中,輸入發(fā)布應(yīng)用程序的文件路徑或FTP位置(如d:\deploy)。然后單擊“下一步”繼續(xù)。

(4)在“用戶如何安裝應(yīng)用程序?”頁中,單擊“從CD-ROM或DVD-ROM”,然后單擊“下一步”繼續(xù)。

(5)如果在CD-ROM上發(fā)布應(yīng)用程序,可能會希望從網(wǎng)站提供更新。在“應(yīng)用程序?qū)⒌侥睦餀z查更新?”頁中,選擇更新選項:

①如果應(yīng)用程序?qū)z查更新,則單擊“該應(yīng)用程序?qū)南铝形恢脵z查更新”,然后輸入發(fā)布更新的位置。輸入的位置可以是文件位置、網(wǎng)站或FTP服務(wù)器。

②如果應(yīng)用程序不檢查更新,則單擊“該應(yīng)用程序?qū)⒉粰z查更新”。

單擊“下一步”繼續(xù)。

(6)單擊“完成”以發(fā)布應(yīng)用程序。

發(fā)布狀態(tài)將顯示在任務(wù)欄的狀態(tài)通知區(qū)域中。

注意:

完成發(fā)布后,需要使用CD刻錄機(jī)或DVD刻錄機(jī)從步驟(3)中指定的位置將文件復(fù)制到CD-ROM或DVD-ROM媒體。

【例9-4】使用ClickOnce部署VS2005中的WinForm應(yīng)用程序。

(1)新建項目“Demo9-4”。重新命名窗體為frmIE_Load,向窗體中添加如表

9-5

所示的控件。

雙擊btnLink,在btnLink_Click事件中輸入代碼:

privatevoidbtnLink_Click(objectsender,EventArgse)

{

webBrowser1.Url=newUri(txtAddress.Text.Trim());

webBrowser1.Update();

}

運行程序,運行結(jié)果如圖9-26所示。表9-5窗體frmIE_Load中添加的控件圖9-26程序運行結(jié)果

(2)發(fā)布項目。在項目上點右鍵選擇“屬性”,會看到該項目的屬性列表。左邊的目錄中選擇“發(fā)布”,可以看到關(guān)于發(fā)布的屬性,如圖9-27所示。設(shè)置發(fā)布相關(guān)的屬性,發(fā)行者名稱為“廣東科學(xué)技術(shù)職業(yè)學(xué)院”,產(chǎn)品名稱為“clickOnce測試”,其他全部用默認(rèn)。單擊【立即發(fā)布】按鈕,發(fā)布成功后自動打開發(fā)布頁,如圖9-28所示。

(3)安裝。在本機(jī)或其他任意一臺可以訪問到發(fā)布網(wǎng)頁的機(jī)器上打開IE,訪問發(fā)布頁http://localhost/Demo9-4/publish.htm,點擊安裝。安裝成功后,程序會自動啟動。而開始菜單的目錄中會出現(xiàn)一個快捷方式,指向該程序,如圖9-29所示。圖9-27項目發(fā)布圖9-28發(fā)布頁面圖9-29發(fā)布頁面

(4)更新版本,修改程序。向窗體Load_frmIE中添加如表9-6所示的控件。表9-6窗體frmIE_Load中添加的控件

增加引用:

usingSystem.Deployment.Application;

增加成員變量:

///<summary>///更新標(biāo)志:0,未檢測到更新;1,已檢測到更新;

privatestringflagUpdate="0";增加方法:

privatevoidUpdateApplication(){if(ApplicationDeployment.IsNetworkDeployed==true){ApplicationDeploymentad=ApplicationDeployment.CurrentDeployment;Text="當(dāng)前版本:"+ad.CurrentVersion;toolTipUpdate.SetToolTip(this,Text);UpdateCheckInfocheckInfo=ad.CheckForDetailedUpdate();if(checkInfo.UpdateAvailable==true){flagUpdate="1";toolTipUpdate.SetToolTip(this,"檢測到新的版本:"+checkInfo.AvailableVersion);if(MessageBox.Show("檢測到新的版本:"+checkInfo.AvailableVersion+",現(xiàn)在需要更新嗎?\n您也可以稍后手工更新到最新版本!","",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes){ad.Update();MessageBox.Show("更新完畢,將要重新啟動程序!");Application.Restart();}}}}

增加或修改事件:

privatevoidfrmIE_Load(objectsender,EventArgse){UpdateApplication();}privatevoidpicReflash_Click(objectsender,EventArgse){UpdateApplication();}privatevoidtimerUpdate_Tick(objectsender,EventArgse){if(timerUpdate.Enabled){if(flagUpdate=="0"){UpdateApplication();}}}

運行程序。

(5)二次發(fā)布。

(6)客戶端更新。在客戶端打開程序時,系統(tǒng)會先檢測是否有更新的版本,如果有,則彈出頁面詢問是否下載,如圖9-30所示。選擇“確定”,則自動更新新版本。如圖9-31所示。此時,若再有新的更新發(fā)布,程序可以自動檢測到更新,并詢問是否更新到新的版本,如圖9-32所示。需要更新點擊【是】則立即更新,更新完后程序會重新啟動。還可以點擊【否】暫時不更新,之后程序直到關(guān)閉都不再自動提醒,需要手工點擊刷新圖標(biāo)更新程序。圖9-30發(fā)布頁面圖9-31發(fā)布頁面

圖9-32發(fā)布頁面

2.通過WindowsInstaller部署

通過WindowsInstaller部署,可將應(yīng)用程序打包到setup.exe文件中,并將該文件分發(fā)給用戶,用戶可以運行setup.exe文件安裝應(yīng)用程序。

在安裝過程中,還可以設(shè)置快捷方式和文件關(guān)聯(lián)、添加注冊表項、顯示自定義對話框以及檢查InternetExplorer的版本等。

注意:創(chuàng)建自己的安裝程序時,并非需要執(zhí)行上面的所有步驟。

1)創(chuàng)建或添加部署項目

部署應(yīng)用系統(tǒng)時,首先要將部署項目添加到解決方案。部署項目可以指定在開發(fā)時和開發(fā)后解決方案的部署位置以及部署方式。一個解決方案可包含多個部署項目,而部署項目可能與配置相關(guān)。

與WinForms相關(guān)的安裝項目有兩種:

●安裝項目:用于部署可執(zhí)行的應(yīng)用程序。

●合并模塊項目:部署不以獨立應(yīng)用程序的形式存在且不能直接部署的控件或組件。它是一個可重新分發(fā)的程序包,可以與現(xiàn)有安裝項目合并。

創(chuàng)建新部署項目的步驟如下:

(1)在“文件”菜單上指向“添加”,然后單擊“新建項目”。

(2)在隨后出現(xiàn)的“添加新項目”對話框的“項目類型”窗格中,打開“其他項目類型”節(jié)點,選擇“安裝和部署”,如圖9-33所示。圖9-33新建部署項目

向解決方案中添加現(xiàn)有的部署項目的步驟如下:

(1)在“文件”菜單上指向“添加”,然后單擊“現(xiàn)有項目”。

(2)在隨后出現(xiàn)的“添加現(xiàn)有項目”對話框中,瀏覽到部署項目所在的位置,然后單擊“打開”。

2)設(shè)置部署項目屬性

部署項目具有兩類屬性,分別為常規(guī)項目屬性和配置相關(guān)屬性。常規(guī)屬性在“屬性”窗口中設(shè)置,此類屬性應(yīng)用于所有項目配置。若要設(shè)置配置相關(guān)屬性,請使用“部署屬性”對話框。配置相關(guān)屬性應(yīng)用于特定項目配置。

設(shè)置配置相關(guān)屬性的步驟如下:

(1)在“解決方案資源管理器”中,選擇安裝項目節(jié)點。

(2)在“視圖”菜單上選擇“屬性頁”,如圖

溫馨提示

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

評論

0/150

提交評論