~在思考中沉淀~
博客园
首页
新随笔
联系
订阅
管理
21 Posts :: 0 Stories :: 60 Comments :: 0 Trackbacks
公告
微软免费计数器
MSN:[flyingbird@vip.sina.com ]
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(5)
给我留言
查看留言
我参与的团队
SharePoint团队(0/813)
随笔分类
Asp.net(3)
MS .Net相关(3)
读书心得(1)
技术视点(5)
生活随笔(9)
随笔档案
2006年1月 (2)
2005年4月 (1)
2005年3月 (2)
2005年1月 (9)
2004年12月 (7)
文章分类
asp.net
winform
项目开发
收藏夹
管理
技术
.Net~英文
blog@msdn.com
MSDN
theserverside
webblogs@asp.net
.Net~中文
MSDN
博客堂
工作流
管理
项目管理者联盟
职业经理进修手册
中国项目管理网
最新评论
1. re: 科技对生活的影响
不知道
--不知道
阅读排行榜
1. 科技对生活的影响(6010)
2. 学习SQL Server全文索引(4906)
3. 创建自定义的Visual Studio项模板(2869)
4. 开始GMail之旅(2817)
5. VS2005中通过code snippet定制类模板(2783)
评论排行榜
1. WhoIsOnline ;) - 解读CNForum源码中在线用户统计(10)
2. 有要Gmail的吗?;)[已结束!](8)
3. 开始GMail之旅(8)
4. 科技对生活的影响(7)
5. RSS Reader\Workflow Lite\User Manager for Sharepoint以及一点想法(6)
创建自定义的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。至此,如何来自定义项模板就基本清楚了。进而通过这种方式,我们可以尝试自定义项模板的集合,例如可以把常用的一些模式实现作成项模板,这样无疑会对开发效率的提高有所帮助!
BTW:刚刚发现这篇
点缀
的
自定义VS.NET2003
有所重复,呵呵~
posted on 2005-01-28 16:11
~在思考中沉淀~
阅读(2869)
评论(4)
编辑
收藏
网摘
所属分类:
MS .Net相关
Feedback
#1楼
2006-04-27 10:17
慕容剑秋 [未注册用户]
楼主,好像对VS2003中文版本不适用啊。。
回复
引用
#2楼
2006-04-27 12:02
慕容剑秋 [未注册用户]
搞定了。。谢谢
回复
引用
#3楼
2006-05-10 15:19
慕容剑秋 [未注册用户]
问下,如果要做成安装包的话,该如何实现呢?
回复
引用
#4楼
2006-05-11 10:15
慕容剑秋 [未注册用户]
所有的操作,我以手动方式成功了。但是类模板内如果需要引用到外部类的时候就不行了啊。。我的设想是像水晶报表一样的(点了水晶报表图标进行添加新项后,会自动在'引用'文件夹内加载水晶报表模板类所需要的dll)who能帮我啊。。
回复
引用
图书专题
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
人才
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
Google站内搜索
[推荐职位]上海盛大网络招聘.Net开发工程师
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》
相关文章:
相关链接:
所属分类的其他文章:
VS2005中通过code snippet定制类模板
创建自定义的Visual Studio项模板
my代码分析器
最新IT新闻:
环球企业家:分众易帜幕后
雅虎、三星合作 电视登录雅虎YouTube等网站
传IBM将于23日宣布裁员16000人
2009年9大最热门IT技能
北京谷歌被法院判令更名 赔偿谷歌中国10万
Powered by:
博客园
Copyright © ~在思考中沉淀~