创建自定义的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项模板相关推荐
- SharePoint 2010 沙盒解决方案以及 Visual Studio 2010 模板
SharePoint 2010中的沙盒解决方案为SharePoint开发提供了很好的支持.我们在不做场部署的情况下,可以使用很多伟大的功能.但是,沙盒解决方案也有它自有的限制,不是所有的项目模板(pr ...
- 修改Visual Studio类模板注释信息
背景资料 在开发过程中,经常需要给新增的类和接口添加 public 修饰符和一些相关的注释信息,这个工作是机械而且枯燥的,这个可以通过修改VS自带的类模板来实现. 1.首先找到VS的安装目录,例如如下 ...
- 创建自己的Visual Studio插件仓库
文章目录 使用插件的问题 如何建立私有插件仓库 下载插件安装文件 创建插件仓库描述Atom.xml 添加私有插件仓库 下载安装 共享插件仓库 使用插件的问题 目前在使用Visual Studio 20 ...
- vs2019创建c语言,Visual Studio 2019创建一个C语言控制台项目
Visual Studio 2019创建一个C语言控制台项目 1 创建项目 1.1 选择使用内容功能 ① 打开软件后,来到起始页界面,点击[创建新项目] 1.2 填写项目信息 ① 语言选择[C++] ...
- Visual Studio 2010 模板缺失
新建项目时,发现竟然没有SharePoint的项目模板,难道是因为先前用虚拟光驱安装失败,导致了项目模板丢失?查了资料,发现用管理员身份运行Visual Studio 2010 提示符,输入" ...
- 如何修改或新增visual studio 的模板
在 visual studio 中添加模板,我这里是新增mvc.net的模板 vs2017在文件夹=>(举例说明,请替换为相应的安装目录) D:\Program Files (x86)\Micr ...
- 【Unity3D】Unity 脚本 ① ( 创建 C# 脚本 | Visual Studio 2019 中打开 C# 脚本 | 编译 C# 脚本 | 挂载 C# 脚本到游戏物体 | 运行脚本 )
文章目录 一.创建 Unity 脚本 二.Visual Studio 2019 中打开 C# 脚本 三.编译 C# 脚本 四.挂载 C# 脚本到游戏物体 GameObject 1.添加组件方式 2.直 ...
- java 文字生成pdf,并创建自定义表单域pdf模板
目录 本文总共知识点: pom 所有的import 生成带表格的pdf 另一种方式是指定坐标生成文本域 main方法: 创建表单域做为pdf模板: 创建签名域: 根据文字获取坐标位置 完整代码: 本文 ...
- [转]利用ASP.NET 2.0创建自定义Web控件(1)
原址:http://hi.baidu.com/sjbh/blog/item/cc58fd1bd35d3ad2ad6e7593.html 简介 从使用基本的文本编辑器到创作标记页面,Web 开发已经 ...
最新文章
- Linux学习总结(9)——Linux 新手必知必会的 10 条 Linux 基本命令
- vue 微信支付的坑_vue_模式下h5微信支付
- 解决WCF接口无法传递object参数的问题
- matlab 二维高斯滤波 傅里叶_机器视觉 03.2 频域低通滤波
- 【分层图最短路】通信线路
- 官网下载mysql连接驱动jar包教程
- mpp格式文用什么软件打开
- 机器学习应用——强化学习课程总结 实例 “自主学习Flappy Bird游戏”(MDP蒙特卡洛强化学习Q-learningDRLDQN)
- vant-uploader上传照片无法删除
- 配置计算机能不能关机,详细教你电脑自动关机怎么设置
- MGF病毒的利用代码
- 五款宝藏浏览器插件推荐,一定要看到最后
- 【方案分享】2020个人抖音账号打造执行方案(附下载)
- Centos7设置1920x1080分辨率
- 需求分析和数据分析那些事。
- ERROR: node with name rabbit already running on xxx
- 华为路由交换学习篇-链路聚合
- 51nod 13831048 整数分解为2的幂 [递推]【数学】
- 苹果cms模板_苹果cms怎么更换模板?
- 直击|传熊猫直播进入破产清算 副总裁庄明浩已离职