可能經過很多部落格的介紹,大家都知道程式碼片段的使用,使用程式碼片段可以很方便地產生一些常用的代碼格式,確實對我們開發很方便。在團隊開發中或者在某些情況下我們經常可能還會希望使用Visual Studio產生的程式碼自動帶有一些資訊,比如代碼檔案的建立時間、代碼的說明及對命名空間的引用等等,實際上這個功能經周公證實在Visual Studio2005以上版本中就支援了。
下面以周公的本本的具體情況為例來加以說明,在周公的DELL 1425(之所以提這款筆記本是提醒大家不要購買垃圾DELL)上系統是安裝在C盤,在系統硬碟下同時安裝了Visual Studio 2005和Visual Studio 2008兩套Visual Studio,並且安裝了正版的SQL Server 2005,因為系統硬碟經常在Windows XP和Windows 7之間切換並且還想在Windows XP和Windows 7之間共用某些個人配置,所以將我的文件目錄設定到了系統最後的一個盤G盤上了,具體路徑為G:/My Documents,如果不做特別配置應為C:/Documents and Settings/zhoufoxcn/My Documents,這一點尤其注意。
這裡針對Visual Studio 2008來進行說明,首先我們開啟C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE這個目錄(如果使用Visual Studio 2005則對應的路徑為C:/Program Files/Microsoft Visual Studio 8/Common7/IDE),可以看到如下的情況:
從中可以看出ItemTemplates和ProjectTemplates檔案夾被周公選中了,因為這個檔案夾對我們有用。其中ItemTemplates檔案中存放著我們向項目添加檔案時的模板,ProjectTemplates檔案夾顧名思義存放著我們建立項目的模板。這些檔案夾中的模板分別會在我們建立檔案或者項目時出現。
除了這些模板之外,Visual Studio在建立時還會搜尋目前使用者的個人模板,在周公的本本上針對Visual Studio 2008的個人模板存放路徑為G:/My Documents/Visual Studio 2008/Templates(如果沒有經過這種這樣的特殊設定,這個路徑可能為C:/Documents and Settings/zhoufoxcn/My Documents/Visual Studio 2008/Templates,其中的zhoufoxcn為當前登入系統的使用者名稱),開啟這個檔案夾,我們看到如下情況:
在沒有做任何配置的時候這兩個檔案夾都是空的,在此時如果我們向項目中添加檔案會看到這樣的情況,如:
從可以看出,我的模板是空的。
好了,下面周公將C:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE下的ItemTemplates和ProjectTemplates檔案夾拷貝到了當前個人設定檔夾G:/My Documents/Visual Studio 2008/Templates下(請注意你的電腦配置與我的電腦配置中路徑的對應關係),可能系統會提示是否覆蓋,點擊確認之後我們再在任何項目中建立新檔案會看到下面的情況,如所示:
此時我們可以看到我的模板下可以建立的新檔案類型和系統的一摸一樣,如果此時我們選擇建立的話,產生的檔案內容也會和系統模板的一樣。為了打造屬於我們個性的代碼,我們需要對我的模板進行改造。
舉例來說,假如我們要改變系統預設產生的程式碼,想在建立代碼時自動添加一些資訊,比如我們想讓預設產生的是public的,那麼可以按照下面的步驟做:
首先開啟我的模板存放路徑,在周公這裡這個路徑是G:/My Documents/Visual Studio 2008/Templates/ItemTemplates(請注意你的可能與周公的不同),這個檔案夾下存放的是包含VB.NET、C++及C#等建立項目的模板,如果我們要改變的是C#檔案的,請繼續開啟C#檔案的建立模板,在周公本本上這個路徑為G:/My Documents/Visual Studio 2008/Templates/ItemTemplates/CSharp/Code/2052,在這個檔案夾下有四個zip檔案,名稱是Class.zip、CodeFile.zip、Interface.zip和NETCFv2-Class.zip,分別對應的是添加類、代碼檔案、介面及.NET Compact Framework類的模板,在每個zip壓縮包裡都有一個.cs檔案和一個.vstemplate檔案。在這裡周公將Class.zip解壓出來,這時的class.cs檔案代碼如下:
using System;<br /> using System.Collections.Generic;<br /> $if$ ($targetframeworkversion$ == 3.5)using System.Linq;<br /> $endif$using System.Text;</p><p> namespace $rootnamespace$<br /> {<br /> class $safeitemrootname$<br /> {<br /> }<br /> }
將代碼更改如下:
using System;<br /> using System.Collections.Generic;<br /> $if$ ($targetframeworkversion$ == 3.5)using System.Linq;<br /> $endif$using System.Text;</p><p> namespace $rootnamespace$<br /> {<br /> /// <summary><br /> /// 作者:zhoufoxcn<br /> /// 時間:$time$<br /> /// 公司:$registeredorganization$<br /> /// 著作權:$year$-2012<br /> /// CLR版本:$clrversion$<br /> /// 部落格地址:http://blog.csdn.net/zhoufoxcn<br /> /// $safeitemrootname$說明:本代碼著作權歸周公所有,使用時必須帶上周公部落格地址<br /> /// 唯一標識:$guid1$<br /> /// </summary><br /> public class $safeitemrootname$<br /> {<br /> $safeitemrootname$()<br /> {<br /> }<br /> }<br /> }
儲存class.cs,然後利用壓縮軟體將class.cs和剛剛從Class.zip中解壓出來Class.vstemplate檔案壓縮為Class.zip檔案(注意一定要壓縮成zip檔案而不是rar或者其它格式檔案,WinRAR提供這種功能),然後替換原來的Class.zip檔案。
好了,現在我們可以檢驗我們的成果了。隨便開啟一個項目,按照“添加”-“建立項”的步驟添加,在彈出的對話方塊中“我的模板”下選擇“類”(因為我們剛剛改的就是我的模板中添加的類的模板),這時Visual Studio 2008按照模板產生的程式碼如下:
using System;<br /> using System.Collections.Generic;<br /> using System.Linq;<br /> using System.Text;</p><p> namespace WCFClient<br /> {<br /> /// <summary><br /> /// 作者:zhoufoxcn<br /> /// 時間:2010-6-20 9:39:04<br /> /// 公司:www.netskycn.com<br /> /// 著作權:2010-2012<br /> /// CLR版本:2.0.50727.3603<br /> /// 部落格地址:http://blog.csdn.net/zhoufoxcn<br /> /// Class1說明:本代碼著作權歸周公所有,使用時必須帶上周公部落格地址<br /> /// 唯一標識:f5d4bfbe-accd-4d77-92b0-1407db616ae1<br /> /// </summary><br /> public class Class1<br /> {<br /> Class1()<br /> {<br /> }<br /> }<br /> }
從上面的例子可以看出選擇我的模板的項就會按照預定好的格式產生代碼,如果我們對項目中的代碼有特殊格式要求的話,在這裡統一定製非常方便,至少周公以後會用這種模板來寫公布在部落格上的代碼,因為周公注意到有很網站喜歡將別人部落格上的文章中的連結資訊和作者資訊去掉,這事實上違反了作者的聲明。有時間的話我們可以針對每一個項更改出自己的模板。
上面我們僅僅示範了產生新檔案的配置,其實我們還可以更改新產生項目的配置,按照前面的操作我們添加新項目時也有我的模板選項,如所示:
不過即使從我的模板中選擇建立新項目也和系統中的項目一樣,因為沒有經過任何特殊配置。我們可以修改G:/My Documents/Visual Studio 2008/Templates/ProjectTemplates/CSharp下的項目模板,它們同樣也是一個zip檔案,比如我們想要統一程式集資訊,可以修改這個zip檔案中的assemblyinfo.cs檔案的內容,這樣就不用每次都手動去修改程式集資訊了。
通過上面的步驟之後可以讓我們很方便地定製了添加新項或者新項目的模板,這在公司中團隊開發中還是相當有用的,也方便對代碼檔案的格式的統一。
需要說明的是在編輯模板時會看到一個形如$time$、$rootnamespace$之類的東西,這些算是產生模板時用到的變數吧,在編輯模板時可以使用哪些變數微軟沒有官方的資料,不過周公留意了一下,大概有如下:
Itemname
safeitemname
sateitemrootname
projectname
safeprojectname
rootnamespace
guid[1-10]
time
year
username
userdomain
machinename
clrversion
targetframeworkversion
registeredorganization
wizarddata
可能有些人對上面的變數名不是太理解,其實是有規律的,都是一到幾個單詞的全稱,只不過沒有遵循我們平常所說的Camel和Pascal命名法則罷了(大家可以看的出不遵守命名法則確實難讀多了),知道這個規律之後這些變數的用途大家都能顧名思義了,如果確實不能也能根據最終產生的程式碼推斷出它的用法的。此外,如果覺得每次都要從“我的模板下”選擇很麻煩的話,可以用更改後自訂模板替換系統中的模板。在剛剛編輯模板時我們還看到了一些簡單邏輯,比如當使用的項目.NET Framework版本為3.5時會自動使用System.Linq命名空間,我們還可以模範系統模板中的邏輯增加更多更符合個人或者公司需要的邏輯。
周公
2010-06-20