Mark White Microsoft Corporation 2001 年 9 月 摘要:本文提供了如何在團(tuán)隊(duì)開發(fā)環(huán)境中使用 Visual Studio .NET Beta 2 的指導(dǎo)。本文假設(shè)需要由多個開發(fā)人員開發(fā)同一個項(xiàng)目,并且他們使用 Visual SourceSafe 進(jìn)行源代碼控制。 目錄 簡介 設(shè)置文件共享訪問模式 在 Visual SourceSafe 內(nèi)創(chuàng)建項(xiàng)目 從 Visual SourceSafe 訪問項(xiàng)目 修改文件 公布更改 獲取最新版本 脫機(jī)工作 提示與技巧 Visual Studio .NET Beta 2 中的問題 總結(jié) 簡介 在 Microsoft® Visual Studio® .NET Beta 2 中進(jìn)行 Web 應(yīng)用程序團(tuán)隊(duì)開發(fā)的推薦方法是基于“文件共享”訪問模式。每個開發(fā)人員使用的都是各自虛擬根目錄中的文件副本,但所有用戶都需要從中央 Microsoft® Visual SourceSafe® 項(xiàng)目簽入和簽出文件。該方法具有隔離功能,防止某個團(tuán)隊(duì)成員的更改影響整個團(tuán)隊(duì)的工作副本。 該方法與 Microsoft® Visual InterDev® 6.0 采用的方法不同,后者使用 Microsoft® FrontPage® Web 訪問。文件共享 Web 訪問是 Visual Studio .NET Beta 2 的默認(rèn)訪問模式,并推薦在團(tuán)隊(duì)開發(fā)中使用。 Visual SourceSafe 集成與 Visual Studio .NET 共同工作的方式和它與 Visual Studio 6.0、Microsoft® Visual C++® 和 Microsoft® Visual Basic® 項(xiàng)目共同工作的方式很相似。開發(fā)人員可以在本地創(chuàng)建自己的項(xiàng)目(如果使用 http://localhost),并可以從一個公用 Visual SourceSafe 項(xiàng)目進(jìn)行簽入簽出。這點(diǎn)也與 Visual InterDev 6.0 不同,后者需要團(tuán)隊(duì)的所有開發(fā)人員都在中央服務(wù)器的同一個虛擬根目錄下工作。 本文中的討論以 Web 應(yīng)用程序的開發(fā)為例,但此方法同樣適用于在 Visual Studio .NET Beta 2 中開發(fā)非 Web 應(yīng)用程序。 請注意,將應(yīng)用程序適當(dāng)?shù)貏澐譃槎鄠獨(dú)立的項(xiàng)目以及使用 ASP.NET 用戶控制、HTTP 模塊和類庫都是進(jìn)行團(tuán)隊(duì)工作的有效方法。 設(shè)置文件共享訪問模式 如上所述,在 Visual Studio .NET Beta 2 中,文件共享是默認(rèn)訪問模式。若要確認(rèn)訪問模式的設(shè)置是否正確,請單擊“Tools”菜單上的“Options”,單擊“Projects”,再單擊“Web Settings”。然后將“Preferred”訪問模式設(shè)置為“File Share”,再單擊“OK”。這樣 Web 項(xiàng)目就可以添加到 Visual SourceSafe。 如果現(xiàn)有項(xiàng)目使用 FrontPage 訪問模式,可以將訪問模式更改為“文件共享”。請打開 Solution Explorer,用鼠標(biāo)右鍵單擊項(xiàng)目,然后單擊“Properties”。單擊“Common Properties”,然后單擊“Web Settings”。將“Web Access Mode”設(shè)置為“File Share”,然后單擊“OK”。現(xiàn)在,請保存、關(guān)閉并重新打開解決方案,使項(xiàng)目設(shè)置的更改生效。 本文的后面部分假設(shè)您正在使用“文件共享”訪問模式。 在 Visual SourceSafe 內(nèi)創(chuàng)建項(xiàng)目 第一個團(tuán)隊(duì)成員創(chuàng)建一個包含一個或多個項(xiàng)目的解決方案。(由于使用了文件共享訪問,如果您要在其他計算機(jī)上創(chuàng)建項(xiàng)目,則仍要將項(xiàng)目位置指定為 http://myserver,但您需要通過通用命名約定 (UNC) 來訪問 \\myserver\c$\inetpub\wwwroot 或 \\myserver\wwwroot$。)解決方案準(zhǔn)備就緒,可供其他團(tuán)隊(duì)成員開始使用時,第一個團(tuán)隊(duì)成員應(yīng)在 Solution Explorer 內(nèi)用鼠標(biāo)右鍵單擊解決方案或項(xiàng)目文件,然后選擇“Add Solution to Source Control”。另外,第一個團(tuán)隊(duì)成員也可以在“File”菜單上,單擊“Source Control”,然后單擊“Add Solution to Source Control”。 如果解決方案包含使用文件共享訪問模式的 Web 項(xiàng)目,則會出現(xiàn)以下警告。
圖 1:文件共享警告對話框 可以忽略該警告。單擊“Continue”。 集成開發(fā)環(huán)境 (IDE) 將提示您指定 Visual SourceSafe 數(shù)據(jù)庫服務(wù)器,然后要求您指定要將解決方案文件和該解決方案的各個項(xiàng)目存儲在 Visual SourceSafe 中的位置。 Visual Studio .NET 內(nèi)的默認(rèn)行為是以“Admin user”(管理員用戶)的身份將用戶登錄到默認(rèn)的 Visual SourceSafe 數(shù)據(jù)庫(通常稱為“公用”)。默認(rèn)用戶名和密碼由 Visual SourceSafe 提供。由于默認(rèn)管理員用戶口令為空,所以將解決方案添加到 Visual SourceSafe 時可能不會提示您指定 Visual SourceSafe 數(shù)據(jù)庫服務(wù)器,而可能自動將您登錄到默認(rèn) Visual SourceSafe 數(shù)據(jù)庫,并直接顯示“Add to SourceSafe Project”對話框。默認(rèn)情況下,將顯示登錄對話框。(Visual SourceSafe 的新版本,包括版本 6.0c 的測試版,關(guān)閉了登錄對話框。Visual SourceSafe 6.0c 的最后發(fā)行版將打開該對話框并設(shè)為默認(rèn)設(shè)置。) 若要避免此問題,請在“Tools”菜單上,單擊“Options”,單擊“Source Control”,然后單擊“SCC Provider”。將登錄 ID 更改為適當(dāng)?shù)挠脩簟螕簟癆dvanced”,并單擊“Integration”選項(xiàng)卡。在“Choose SourceSafe Database”下,選擇“Prompt”。
圖 2:將項(xiàng)目添加到 Visual SourceSafe 此外,還會通過同一對話框,提示您指定用于存儲解決方案內(nèi)包含的每個項(xiàng)目的 Visual SourceSafe 位置。要重新設(shè)置,第一次提示時,您可以為該解決方案以及同一驅(qū)動器上的所有非 Web 項(xiàng)目設(shè)置 Visual SourceSafe 位置。接下來,將提示您提供 Visual SourceSafe 的位置供解決方案內(nèi)的每一個 Web 項(xiàng)目使用。如果您不想將某個項(xiàng)目添加到 Visual SourceSafe 中,請單擊“Cancel”然后使用“Add selected projects to source control”,這樣可控制要添加的項(xiàng)目。本文將在稍后說明將所選的項(xiàng)目添加到源代碼控制中。Solution Explorer 將已取消的項(xiàng)目顯示為簽出,但是項(xiàng)目文件不在 Visual SourceSafe 內(nèi)。在此情況下,簽出標(biāo)識符將用來表示該項(xiàng)目不添加到 Visual SourceSafe 中。 設(shè)置 Visual SourceSafe 位置時,可以將解決方案文件和項(xiàng)目放置到同一 Visual SourceSafe 文件夾或者多個單獨(dú)的文件夾中。最好讓 Visual Studio.NET 控制您所有的非 Web 項(xiàng)目的放置。然而,每個 Web 項(xiàng)目應(yīng)放置到各自的文件夾中以確保該項(xiàng)目不與其他 Web 項(xiàng)目沖突。很可能幾個項(xiàng)目會包含同名文件(例如,WebForm1.aspx)。如果試圖在同一 Visual SourceSafe 文件夾中放置多個項(xiàng)目,并且該文件夾中已存在同名文件,則會出現(xiàn)以下對話框,如圖 3 所示:
圖 3:試圖將相同文件添加到 Visual SourceSafe 項(xiàng)目時出現(xiàn)的警告對話框 單擊“Select different location”,然后如前所述繼續(xù)操作。 如果要在已添加到 Visual SourceSafe 的解決方案中添加新項(xiàng)目或不在 Visual SourceSafe 內(nèi)的現(xiàn)有項(xiàng)目,請先將項(xiàng)目添加到該解決方案。然后,在 Solution Explorer 內(nèi)用鼠標(biāo)右鍵單擊該解決方案,并執(zhí)行以下任一操作: 單擊“Add”,然后單擊“New Project...” 或者,單擊“Add”,然后單擊“Existing Project...” Solution Explorer 將以簽出形式顯示該項(xiàng)目,但文件不在 Visual SourceSafe 中,F(xiàn)在,在 Solution Explorer 中選擇項(xiàng)目,并在“File”菜單上,單擊“Source Control”。最后,單擊“Add Selected Projects to Source Control...”,這將要求您指定在 Visual SourceSafe 中存儲項(xiàng)目的位置,如前所述。對于非 Web 項(xiàng)目,最好使用“File“菜單下的“Check In”命令由 Visual Studio.NET 控制 Visual SourceSafe 位置。 從 Visual SourceSafe 訪問項(xiàng)目 每個團(tuán)隊(duì)成員第一次從 Visual Source Safe 訪問項(xiàng)目時,必須進(jìn)行如下操作:在“File”菜單上,單擊“Source Control”,然后單擊“Open Project From Source Control”。 IDE 將提示該團(tuán)隊(duì)成員指定 Visual SourceSafe 數(shù)據(jù)庫服務(wù)器,并要求團(tuán)隊(duì)成員選擇 Visual SourceSafe 項(xiàng)目,以及指定要復(fù)制解決方案文件和所有非 Web 項(xiàng)目的本地文件夾。在我的示例屏幕拍圖(圖 4)中,我已經(jīng)打開 MyWebProjects 并將解決方案文件保存到 D:\Documents and Settings\marwhite\My Documents\Visual Studio Projects。
圖 4:設(shè)置 Visual SourceSafe 項(xiàng)目的本地文件夾位置 默認(rèn)情況下解決方案文件會復(fù)制到 C:\Documents and Settings\<您的用戶名>\My Documents\Visual Studio Projects。您可以通過以下操作重新進(jìn)行配置:在“Tools”菜單上,單擊“Options”,單擊“Environment”,然后單擊“Projects and Solutions”。 如果解決方案文件和任何項(xiàng)目文件存儲在多個單獨(dú)的文件夾中,則不會顯示以下對話框。但是,如果解決方案和項(xiàng)目文件存儲在同一 Visual SourceSafe 位置,則 IDE 會提示用戶選擇解決方案文件。
圖 5:選擇解決方案文件 此時,如果解決方案包含一個或多個文件共享 Web 項(xiàng)目,則會顯示“Set Project Location”對話框。
圖 6:“Set Project Location”對話框 必須對每個 Web 項(xiàng)目使用此對話框以指定各個獨(dú)立網(wǎng)站的位置。可以將 Web 項(xiàng)目放置到一個服務(wù)器上。例如:http://myserver/myproject_myroot。或者,將 Web 項(xiàng)目放置到您的本地計算機(jī)上。例如:http://localhost/myproject。Visual Studio 將為每個獨(dú)立的 Web 項(xiàng)目創(chuàng)建一個虛擬根目錄。 注意:如前所述,只需在第一次使用時訪問解決方案。(在“File”菜單上,單擊“Source Control”,然后單擊“Open Project From Source Control”。)下次打開解決方案時,必須使用本地磁盤上的解決方案文件。請不要從 Web 服務(wù)器或 Visual SourceSafe 打開應(yīng)用程序。 如果要將 Visual SourceSafe 內(nèi)現(xiàn)有的項(xiàng)目添加到解決方案,請執(zhí)行下列操作:在“File”菜單上,單擊“Source Control”,然后單擊“Add Project From Source Control...”,IDE 將顯示如前所述的對話框。 修改文件 當(dāng)團(tuán)隊(duì)成員處理自己的代碼時,其工作方式與通常的工作方式完全一樣。修改文件時,開發(fā)環(huán)境會自動提示團(tuán)隊(duì)成員將其簽出。請注意,在項(xiàng)目中添加和刪除文件需要簽出項(xiàng)目文件。 公布更改 需要向團(tuán)隊(duì)公布新更改的團(tuán)隊(duì)成員會對源代碼進(jìn)行更改、測試和調(diào)試。更改完成后,可以選擇文件,單擊鼠標(biāo)右鍵,然后單擊“Check In”,或者在“File”菜單上,單擊“Source Control”,然后單擊“Check In”。然后,這些更改就會顯示在 Visual SourceSafe 內(nèi)。 獲取最新版本 團(tuán)隊(duì)成員要獲得團(tuán)隊(duì)的最新更改,應(yīng)在 Solution Explorer 中選擇解決方案文件,單擊鼠標(biāo)右鍵,然后單擊“Get Latest Version (Recursive)”。團(tuán)隊(duì)成員需要生成應(yīng)用程序的最新版本時,也應(yīng)執(zhí)行該過程。 脫機(jī)工作 Visual Studio .NET Beta 2 相對于 Visual Studio .NET Beta 1 的重大改進(jìn)之一是脫機(jī)工作。脫機(jī)工作對許多開發(fā)人員來說非常重要,尤其是對于大部分時間在辦公室外和/或旅途中的開發(fā)人員。 脫機(jī)工作允許團(tuán)隊(duì)成員將與 Visual SourceSafe 集成的解決方案和項(xiàng)目設(shè)置成脫機(jī)。也就是說,團(tuán)隊(duì)成員可以在與自己的公司網(wǎng)絡(luò)和 Visual SourceSafe 數(shù)據(jù)庫斷開連接時處理文件。當(dāng)團(tuán)隊(duì)成員返回辦公室后,可以重新連接解決方案和項(xiàng)目,IDE 可使其副本與 Visual SourceSafe 數(shù)據(jù)庫中保留的副本之間的更改保持同步。 進(jìn)入脫機(jī)狀態(tài) 若要使解決方案及其項(xiàng)目脫機(jī),請在“File”菜單上,單擊“Source Control”,然后單擊“Change Source Control...”。IDE 將顯示以下對話框:
圖 7:連接和斷開解決方案項(xiàng)目與 Visual SourceSafe 之間的連接 清除“Connected”復(fù)選框即可使解決方案和項(xiàng)目脫機(jī)。 請注意,在脫機(jī)之前已被您簽出的文件仍保留為您簽出的狀態(tài)。若要避免可能發(fā)生的數(shù)據(jù)丟失現(xiàn)象,最好在脫機(jī)之前簽出要脫機(jī)處理的文件。 脫機(jī)時簽出文件 在脫機(jī)工作時,可以通常方式簽出文件。脫機(jī)工作狀態(tài)下第一次簽出文件時,會顯示以下對話框:
圖 8:在斷開連接時簽出文件 需要取消此對話框(圖 8 中)才能啟用脫機(jī)簽出。請選擇“Don't show this dialog again”,然后單擊“Check out (disconnected)”。將顯示如圖 9 所示的另一個錯誤對話框。可以忽略此對話框;單擊“OK”。
圖 9:斷開連接狀態(tài)下第一次簽出文件時顯示的錯誤對話框 下次試圖在脫機(jī)工作狀態(tài)下簽出文件時將成功簽出。請注意,上述的其他錯誤對話框是 Visual Studio .NET Beta 2 中的小錯誤,將在最終版本中解決。 當(dāng)團(tuán)隊(duì)成員在脫機(jī)狀態(tài)下簽出文件時,已簽出的文件的詳細(xì)信息將存儲為項(xiàng)目的一部分,并且已簽出的文件將標(biāo)記為讀/寫。 脫機(jī)時簽入文件 不可能在脫機(jī)時簽入文件;因?yàn)槟催B接到網(wǎng)絡(luò),簽入命令未啟用。這是故意設(shè)置的,這樣可以在項(xiàng)目重新聯(lián)機(jī)時方便地查看哪些文件在脫機(jī)時被簽出。 進(jìn)入聯(lián)機(jī)狀態(tài) 這與進(jìn)入脫機(jī)狀態(tài)基本上相同。若要使解決方案及其項(xiàng)目聯(lián)機(jī),請在“File”菜單上,單擊“Source Control”,然后單擊“Change Source Control...”。顯示的對話框與進(jìn)入脫機(jī)狀態(tài)時相同。選擇“Connected”即可使解決方案和項(xiàng)目聯(lián)機(jī)。 同步更改 若要使脫機(jī)工作時所做的更改與 Visual SourceSafe 數(shù)據(jù)庫中包含的解決方案和項(xiàng)目文件同步,需要從 Visual SourceSafe 中簽出脫機(jī)工作時簽出的每個文件,并將更改過的文件副本簽入 Visual SourceSafe。 進(jìn)入聯(lián)機(jī)狀態(tài)后,將對每個在脫機(jī)狀態(tài)下簽出的文件顯示以下兩個對話框:
圖 10:協(xié)調(diào)斷開連接狀態(tài)下簽出的文件 首先,單擊“Check out”(如圖 10 所示)。
圖 11:從 Visual SourceSafe 簽出文件 選擇“Leave this file?”可防止您的修改被 Visual SourceSafe 中包含的版本覆蓋。然后,需要簽入您修改后的文件。 警告:如果其他人簽入了此文件,然后您又簽入了相同文件,則將覆蓋其他人所作的變更。 注意:這些對話框僅對您在脫機(jī)狀態(tài)下簽出的文件顯示,而不會對進(jìn)入脫機(jī)狀態(tài)之前已簽出的文件顯示。練習(xí)警告,如第一個對話框所指出的,可能會丟失數(shù)據(jù)。 您在脫機(jī)工作時,如果簽出一個文件,而另一個團(tuán)隊(duì)成員也簽出、修改和簽入了同一文件,則必須非常謹(jǐn)慎,否則您的簽入將覆蓋該團(tuán)隊(duì)成員的修改。最安全的選擇是避免脫機(jī)文件簽出。總是在脫機(jī)前簽出您要處理的文件。如果無法做到這一點(diǎn),或您忘記了在脫機(jī)前簽出了所有要處理的文件,則在同步更改時手動合并文件。 如果您在脫機(jī)工作時簽出了一個文件,而另一個用戶也簽出了同一文件,則當(dāng)您使解決方案和項(xiàng)目聯(lián)機(jī)時,會顯示以下對話框:
圖 12:試圖簽出已簽出的文件時顯示的警告 單擊“OK”。在 Solution Explorer 中,此文件旁會顯示一個小警告符號,表示該文件仍需注意。 最后,如果您在脫機(jī)狀態(tài)下將文件添加到項(xiàng)目,則使項(xiàng)目聯(lián)機(jī)時,只需將新文件簽入 Visual SourceSafe 即可。 提示與技巧 URL 一致 所有的開發(fā)人員最好使用統(tǒng)一的虛擬根目錄,例如 http://localhost/projectName。盡量避免使用特定的服務(wù)器名稱,因?yàn)檫@可能使用戶難以共享項(xiàng)目文件。如果需要使用特定服務(wù)器名稱,請在 web.config 文件內(nèi)定義一個新的 <configSections>,并用它定義應(yīng)用程序的自定義設(shè)置。如果您在使用 Web 引用,則將 Web 服務(wù)放在本地并使用 http://localhost/webServiceName 作為 Web 引用,或?qū)?Web 引用 URL 行為設(shè)置為動態(tài)。動態(tài) URL 行為將在稍后說明。 引用路徑一致 將引用添加到一個非系統(tǒng)程序集時,IDE 會將程序集本地復(fù)制到項(xiàng)目(對于 Web 應(yīng)用程序,程序集將被復(fù)制到 bin 目錄)。若要控制程序集是否進(jìn)行本地復(fù)制,請用鼠標(biāo)右鍵單擊程序集,然后單擊“Propertities”。對于非系統(tǒng)程序集,“Copy Local”應(yīng)設(shè)置為“True”。這是默認(rèn)值,推薦在大多數(shù)情況下使用。 當(dāng)添加引用時,IDE 還會更新用戶項(xiàng)目文件內(nèi)的引用路徑,以指出程序集的實(shí)際位置。用鼠標(biāo)右鍵單擊項(xiàng)目,然后單擊“Propertities”。單擊“Common Properties”,然后單擊“References Paths”。在對話框中(如圖 13 所示),單擊“Cancel”。
圖 13:顯示引用路徑 盡管引用路徑顯示為項(xiàng)目的一個屬性,實(shí)際上它對于設(shè)置了該屬性的項(xiàng)目、計算機(jī)和用戶來說是特有的。這就意味者,如果開發(fā)人員 1 將引用添加到程序集并簽入了項(xiàng)目文件,則當(dāng)開發(fā)人員 2 獲得項(xiàng)目文件的最新版本時,程序集將顯示在 Solution Explorer 內(nèi)——但是生成很可能會失敗,因?yàn)殚_發(fā)人員 2 可能不具有相同的引用路徑。 要避免此問題,團(tuán)隊(duì)的所有開發(fā)人員應(yīng)該在團(tuán)隊(duì)內(nèi)部使用統(tǒng)一的引用路徑。這樣,只要符合以下條件,則某開發(fā)人員添加引用后其他開發(fā)人員就無需對解決方案或項(xiàng)目文件進(jìn)行任何操作: 引用路徑已經(jīng)設(shè)置,對每個項(xiàng)目任務(wù)只需設(shè)置一次 引用的程序集已存在于硬盤上,并且位置正確 該方法要求定義一個標(biāo)準(zhǔn)的生成輸出位置,并使所有的引用都引用該位置內(nèi)的程序集。如果該條件太嚴(yán)格,可以在引用路徑內(nèi)包含用逗號分隔的多個路徑。 添加 Web 引用 這也是 Visual Studio .NET Beta 2 相對于 Visual Studio .NET Beta 1 的改進(jìn)之一。 在您的項(xiàng)目所在的文件夾內(nèi),存在一個 Web References 文件夾。添加 Web 引用時,會在 Web References 文件夾下創(chuàng)建一個新文件夾。該新文件夾根據(jù)托管 Web 服務(wù)的服務(wù)器命名,并包含 WSDL、DISCO 和生成的 Web 服務(wù)客戶端代理。該文件夾名稱還用作 Web 服務(wù)客戶端代理的名稱空間。 添加 Web 引用時,這些文件夾和文件將添加到 Visual SourceSafe 項(xiàng)目。更新 Web 引用時,還將簽出、更新和簽入這些文件。(用鼠標(biāo)右鍵單擊 Web 引用,然后單擊“Update Web Referemce”。) 添加 Web 引用時,Web 服務(wù) URL 在 Web 服務(wù)客戶端代理內(nèi)被硬編碼。但是,可以更改 Web 服務(wù)客戶端代理的行為,使它從 .config 文件讀取 Web 服務(wù) URL。請用鼠標(biāo)右鍵單擊 Web 引用,單擊“Properties”,并將“URL Behavior”從“Static”更改為“Dynamic”。
圖 14:Web 引用屬性 下列代碼將被添加到 .config 文件: <configuration> <appSettings> <add key="WinApp1.localhost.Service1" value="http://localhost/WebServiceTest/Service1.asmx" /> </appSettings> </configuration>
|