创建自定义的Visual Studio项模板
生活随笔
收集整理的這篇文章主要介紹了
创建自定义的Visual Studio项模板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關鍵詞:?VisualStudio?模板?VSDIR????VIZ?
目的:?????創建自己的Visual?Studio類模板,以創建實現單例模式(Singleton)的類為例。?
1、何為模板??
????可以通過兩個例子來簡單說明一下。?
????當我們在Visual?Studio.Net中選擇新建項目時,向導通常會提供一些預定義類型的項目供選擇,比如“Window應用程序”、“ASP.NET?Web應用程序”等。只要你選定其中一個并確定,VS會自動相應的項目結構和部分它認為有用的代碼。這些供選擇的東東就是模板的一種,叫項目模板(Project?Template)。?
????當我們要在項目中增加某種文件,通常可以使用“添加新項”來實現。例如增加一個新的類或是XML文件等等。此時我們所選擇選擇的類型也是VS預定義的模板的一種,叫項模板(Item?Template)。?
2、為什么要使用模板???
????模板的著眼點是開發效率上,也就是說通過這些模板我們可以讓VS自動生成一些常用的文件,并初始化結構和代碼以加快開發速度。?
?????典型的就是VS中“添加新項”時可供選擇的那些模板(如組件類、用戶控件等等)。?
????這篇Post主要關注的是項模板的創建及應用。創建項目模板的方式與此類似可以參考: http://www.carlosag.net/Articles/createVSTemplate.aspx。?
3、用項模板來做什么??
????既然要創建自己的項模板,那么就要明確打算讓這個模板來做什么。既然前面提到了模式,那創建一個能夠自動實現單例模式(Singleton)的類的項模板。(BTW:關于Singleton模式本身可以參見: http://www.yoda.arachsys.com/csharp/singleton.html。關于它討論,這里有一篇 http://www.jdon.com/jive/article.jsp?forum=91&thread=17578。)?
????這里先給出一種最簡單的實現Singleton模式的示例:?
?????public?sealed?class?Singleton?
{?
????static?Singleton?instance=null;?
?
????Singleton()?
????{?
????}?
?
????public?static?Singleton?Instance?
????{?
????????get?
????????{?
????????????if?(instance==null)?
????????????{?
????????????????instance?=?new?Singleton();?
????????????}?
????????????return?instance;?
????????}?
????}?
}?
4、如何創建項模板??
創建一個項模板需要完成以下幾步:?
????a、創建項模板的VSDIR文件?[?VSDIR文件的描述可以參見? http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/vsintro7/html/vxconvsdirfiles.asp?]??
????b、創建VSZ文件(項目控件)[?VSZ文件的描述可以參見 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/vclrfunderstandingprojectcontrolfiles.asp?]??
????c、定制javascripts?
????d、創建文件模板?
下面就逐一展開。??
??????
????創建VSDIR文件?
--------------------------------------------------------------------------------
????-打開文件夾<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems/LocalProjectItems/Code?
????打開code.vsdir文件,并在其中添加如下內容:??
????../../CSharpAddSingletonClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|Singleton類|11|Singleton類|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|SingletonClass.cs?
????*?注意:?
????以上內容不要換行。這個文件格式定義見VSDIR文件描述。?
????其中CSharpAddSingletonClassWiz.vsz是指所使用的vsz文件(項目控件)的位置。??
????如后面的圖中顯示的,添加此內容后Singleton類模板將出現在“本地項目項”的“代碼”分支下。如果需要在“本地項目項”下也顯示此“Singleton類”模板,則需要在<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems/LocalProjectItems目錄下的LocalProjectItems.vsdir文件中添加:../CSharpAddSingletonClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|Singleton類|11|Singleton類|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|SingletonClass.cs?
????創建VSZ文件
--------------------------------------------------------------------------------
????-打開文件夾<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems?
????????創建文件CSharpAddSingletonClassWiz.vsz,在其中添加如下內容:?
????VSWIZARD?7.0?
????Wizard=VsWizard.VsWizardEngine.7.1?
????Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz"?
????Param="WIZARD_UI?=?FALSE"?
????Param="PROJECT_TYPE?=?CSPROJ"?
????*注意:VSZ文件格式定義見VSZ文件描述?
????其中比較重要的是Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz",這里“CSharpAddSingletonClassWiz”是指定了當創建Singleton類時使用的向導名稱。??
????定制javascripts?
--------------------------------------------------------------------------------
????打開目錄<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards?
????新建一個名為CSharpAddSingletonClassWiz的目錄,這個名稱是和Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz"中WIZARD_NAME對應的。?
????打開這個目錄,創建目錄Scripts,然后再在Scripts下創建目錄1033。然后創建default.js文件。在其中放置如下代碼:?
?????function?OnFinish(selProj,?selObj)?
{?
????var?oldSuppressUIValue?=?true;?
????try?
????{?
????????var?strTarget?=?wizard.FindSymbol("ITEM_NAME");?
????????var?strClassName?=?strTarget.split(".");?
????????var?bValid?=?wizard.ValidateCLRIdentifier(strClassName[0]);?
????????if?(!bValid)?
????????{?
????????????wizard.ReportError();?
????????????return?VS_E_WIZARDBACKBUTTONPRESS;?
????????}?
????????oldSuppressUIValue?=?dte.SuppressUI;?
????????var?strProjectName?????=?wizard.FindSymbol("PROJECT_NAME");?
????????var?strSafeProjectName?????=?CreateSafeName(strProjectName);?
????????wizard.AddSymbol("SAFE_PROJECT_NAME",?strSafeProjectName);?
????????SetTargetFullPath(selObj);?
????????var?strProjectPath????=?wizard.FindSymbol("TARGET_FULLPATH");?
????????var?strTemplatePath?????=?wizard.FindSymbol("TEMPLATES_PATH");?
?
????????var?strTpl?=?"";?
????????var?strName?=?"";?
????????var?InfFile?=?CreateInfFile();?
?
????????AddReferencesForClass(selProj);?
????????AddFilesToCSharpProject(selObj,?strProjectName,?strProjectPath,?InfFile,?true);?
????}?
????catch(e)?
????{?
????????if(?e.description.length?>?0?)?
????????????SetErrorInfo(e);?
????????return?e.number;?
????}?
????finally?
????{?
???????????dte.SuppressUI?=?oldSuppressUIValue;?
???????????if(?InfFile?)?
????????????InfFile.Delete();?
????}?
}?
?
function?SetFileProperties(oFileItem,?strFileName)?
{?
}?
????*注意:?在這個JS文件中出現的方法調用可以在路徑<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards/2052下的common.js中找到,其中有比較清楚的注釋說明。?
?????
????創建文件模板?
--------------------------------------------------------------------------------
????轉到路徑:<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards/CSharpAddSingletonClassWiz,創建目錄Templates,再在Templates目錄下創建目錄1033。目錄創建完畢后添加文件Templates.inf,內容是:File1.cs(這個File1.cs是指我們所使用的文件模板名稱)。隨后創建文件File1.cs,根據前面給出Singleton模式示例的格式添加以下代碼:?
?????namespace?[!output?SAFE_NAMESPACE_NAME]??
{?
????using?System;?
????/**?<summary>?
????///?[!output?SAFE_CLASS_NAME].?
????///?</summary>?
????class?[!output?SAFE_CLASS_NAME]??
????{?
????????成員#region?成員?
????????private?static?[!output?SAFE_CLASS_NAME]?m_instance;?
?
????????#endregion?
????????構造函數#region?構造函數?
?
????????private?[!output?SAFE_CLASS_NAME]()?
????????{?
????????????//?
????????????//?TODO:?在此處添加構造函數邏輯?
????????????//?
????????}?
?
????????public?static?[!output?SAFE_CLASS_NAME]?GetInstance()?
????????{?
????????????if(?m_instance?==?null?)?
????????????{?
????????????????m_instance?=?new?[!output?SAFE_CLASS_NAME]();?
????????????}?
????????????retrun?m_instance;?
????????}?
?
????????#endregion?
????}?
}?
??????
好了。通過以上的步驟就完成了一個項模板的定制。?
當我們再打開一個項目,選擇“添加新項”時,會發現在本地項目項中多了一個"Singleton類"的模板。如圖:?
同時在“本地項目項”的分支“代碼”中也可以看到“Singleton類”模板。?
當選定打開后并查看代碼,可以發現所創建的類實現前面說描述的Singleton模式。?
OK。至此,如何來自定義項模板就基本清楚了。進而通過這種方式,我們可以嘗試自定義項模板的集合,例如可以把常用的一些模式實現作成項模板,這樣無疑會對開發效率的提高有所幫助!
目的:?????創建自己的Visual?Studio類模板,以創建實現單例模式(Singleton)的類為例。?
1、何為模板??
????可以通過兩個例子來簡單說明一下。?
????當我們在Visual?Studio.Net中選擇新建項目時,向導通常會提供一些預定義類型的項目供選擇,比如“Window應用程序”、“ASP.NET?Web應用程序”等。只要你選定其中一個并確定,VS會自動相應的項目結構和部分它認為有用的代碼。這些供選擇的東東就是模板的一種,叫項目模板(Project?Template)。?
????當我們要在項目中增加某種文件,通常可以使用“添加新項”來實現。例如增加一個新的類或是XML文件等等。此時我們所選擇選擇的類型也是VS預定義的模板的一種,叫項模板(Item?Template)。?
2、為什么要使用模板???
????模板的著眼點是開發效率上,也就是說通過這些模板我們可以讓VS自動生成一些常用的文件,并初始化結構和代碼以加快開發速度。?
?????典型的就是VS中“添加新項”時可供選擇的那些模板(如組件類、用戶控件等等)。?
????這篇Post主要關注的是項模板的創建及應用。創建項目模板的方式與此類似可以參考: http://www.carlosag.net/Articles/createVSTemplate.aspx。?
3、用項模板來做什么??
????既然要創建自己的項模板,那么就要明確打算讓這個模板來做什么。既然前面提到了模式,那創建一個能夠自動實現單例模式(Singleton)的類的項模板。(BTW:關于Singleton模式本身可以參見: http://www.yoda.arachsys.com/csharp/singleton.html。關于它討論,這里有一篇 http://www.jdon.com/jive/article.jsp?forum=91&thread=17578。)?
????這里先給出一種最簡單的實現Singleton模式的示例:?
?????public?sealed?class?Singleton?
{?
????static?Singleton?instance=null;?
?
????Singleton()?
????{?
????}?
?
????public?static?Singleton?Instance?
????{?
????????get?
????????{?
????????????if?(instance==null)?
????????????{?
????????????????instance?=?new?Singleton();?
????????????}?
????????????return?instance;?
????????}?
????}?
}?
4、如何創建項模板??
創建一個項模板需要完成以下幾步:?
????a、創建項模板的VSDIR文件?[?VSDIR文件的描述可以參見? http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/vsintro7/html/vxconvsdirfiles.asp?]??
????b、創建VSZ文件(項目控件)[?VSZ文件的描述可以參見 http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/vclrfunderstandingprojectcontrolfiles.asp?]??
????c、定制javascripts?
????d、創建文件模板?
下面就逐一展開。??
??????
????創建VSDIR文件?
--------------------------------------------------------------------------------
????-打開文件夾<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems/LocalProjectItems/Code?
????打開code.vsdir文件,并在其中添加如下內容:??
????../../CSharpAddSingletonClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|Singleton類|11|Singleton類|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|SingletonClass.cs?
????*?注意:?
????以上內容不要換行。這個文件格式定義見VSDIR文件描述。?
????其中CSharpAddSingletonClassWiz.vsz是指所使用的vsz文件(項目控件)的位置。??
????如后面的圖中顯示的,添加此內容后Singleton類模板將出現在“本地項目項”的“代碼”分支下。如果需要在“本地項目項”下也顯示此“Singleton類”模板,則需要在<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems/LocalProjectItems目錄下的LocalProjectItems.vsdir文件中添加:../CSharpAddSingletonClassWiz.vsz|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|Singleton類|11|Singleton類|{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}|4515|0|SingletonClass.cs?
????創建VSZ文件
--------------------------------------------------------------------------------
????-打開文件夾<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/CSharpProjectItems?
????????創建文件CSharpAddSingletonClassWiz.vsz,在其中添加如下內容:?
????VSWIZARD?7.0?
????Wizard=VsWizard.VsWizardEngine.7.1?
????Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz"?
????Param="WIZARD_UI?=?FALSE"?
????Param="PROJECT_TYPE?=?CSPROJ"?
????*注意:VSZ文件格式定義見VSZ文件描述?
????其中比較重要的是Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz",這里“CSharpAddSingletonClassWiz”是指定了當創建Singleton類時使用的向導名稱。??
????定制javascripts?
--------------------------------------------------------------------------------
????打開目錄<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards?
????新建一個名為CSharpAddSingletonClassWiz的目錄,這個名稱是和Param="WIZARD_NAME?=?CSharpAddSingletonClassWiz"中WIZARD_NAME對應的。?
????打開這個目錄,創建目錄Scripts,然后再在Scripts下創建目錄1033。然后創建default.js文件。在其中放置如下代碼:?
?????function?OnFinish(selProj,?selObj)?
{?
????var?oldSuppressUIValue?=?true;?
????try?
????{?
????????var?strTarget?=?wizard.FindSymbol("ITEM_NAME");?
????????var?strClassName?=?strTarget.split(".");?
????????var?bValid?=?wizard.ValidateCLRIdentifier(strClassName[0]);?
????????if?(!bValid)?
????????{?
????????????wizard.ReportError();?
????????????return?VS_E_WIZARDBACKBUTTONPRESS;?
????????}?
????????oldSuppressUIValue?=?dte.SuppressUI;?
????????var?strProjectName?????=?wizard.FindSymbol("PROJECT_NAME");?
????????var?strSafeProjectName?????=?CreateSafeName(strProjectName);?
????????wizard.AddSymbol("SAFE_PROJECT_NAME",?strSafeProjectName);?
????????SetTargetFullPath(selObj);?
????????var?strProjectPath????=?wizard.FindSymbol("TARGET_FULLPATH");?
????????var?strTemplatePath?????=?wizard.FindSymbol("TEMPLATES_PATH");?
?
????????var?strTpl?=?"";?
????????var?strName?=?"";?
????????var?InfFile?=?CreateInfFile();?
?
????????AddReferencesForClass(selProj);?
????????AddFilesToCSharpProject(selObj,?strProjectName,?strProjectPath,?InfFile,?true);?
????}?
????catch(e)?
????{?
????????if(?e.description.length?>?0?)?
????????????SetErrorInfo(e);?
????????return?e.number;?
????}?
????finally?
????{?
???????????dte.SuppressUI?=?oldSuppressUIValue;?
???????????if(?InfFile?)?
????????????InfFile.Delete();?
????}?
}?
?
function?SetFileProperties(oFileItem,?strFileName)?
{?
}?
????*注意:?在這個JS文件中出現的方法調用可以在路徑<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards/2052下的common.js中找到,其中有比較清楚的注釋說明。?
?????
????創建文件模板?
--------------------------------------------------------------------------------
????轉到路徑:<Program?Files>/Microsoft?Visual?Studio?.NET?2003/VC#/VC#Wizards/CSharpAddSingletonClassWiz,創建目錄Templates,再在Templates目錄下創建目錄1033。目錄創建完畢后添加文件Templates.inf,內容是:File1.cs(這個File1.cs是指我們所使用的文件模板名稱)。隨后創建文件File1.cs,根據前面給出Singleton模式示例的格式添加以下代碼:?
?????namespace?[!output?SAFE_NAMESPACE_NAME]??
{?
????using?System;?
????/**?<summary>?
????///?[!output?SAFE_CLASS_NAME].?
????///?</summary>?
????class?[!output?SAFE_CLASS_NAME]??
????{?
????????成員#region?成員?
????????private?static?[!output?SAFE_CLASS_NAME]?m_instance;?
?
????????#endregion?
????????構造函數#region?構造函數?
?
????????private?[!output?SAFE_CLASS_NAME]()?
????????{?
????????????//?
????????????//?TODO:?在此處添加構造函數邏輯?
????????????//?
????????}?
?
????????public?static?[!output?SAFE_CLASS_NAME]?GetInstance()?
????????{?
????????????if(?m_instance?==?null?)?
????????????{?
????????????????m_instance?=?new?[!output?SAFE_CLASS_NAME]();?
????????????}?
????????????retrun?m_instance;?
????????}?
?
????????#endregion?
????}?
}?
??????
好了。通過以上的步驟就完成了一個項模板的定制。?
當我們再打開一個項目,選擇“添加新項”時,會發現在本地項目項中多了一個"Singleton類"的模板。如圖:?
同時在“本地項目項”的分支“代碼”中也可以看到“Singleton類”模板。?
當選定打開后并查看代碼,可以發現所創建的類實現前面說描述的Singleton模式。?
OK。至此,如何來自定義項模板就基本清楚了。進而通過這種方式,我們可以嘗試自定義項模板的集合,例如可以把常用的一些模式實現作成項模板,這樣無疑會對開發效率的提高有所幫助!
總結
以上是生活随笔為你收集整理的创建自定义的Visual Studio项模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab神经网络1:功能特色
- 下一篇: matlab神经网络2:数据拟合