阿瑞空间

---------激情而不浮躁-------
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Visual Studio自定义模板(二)

Posted on 2008-10-07 20:08  阿瑞  阅读(1603)  评论(0编辑  收藏  举报

继续Visual Studio自定义模板(一)的自定义模板的话题,我们进行定义更完美的模板。首先我们来分析一个Visual Studio模板文件的构成。Visual Studio 2005导出的模板的位置是在“[我的文档]\Visual Studio 2005\My Exported Templates\”文件夹中,而对于项模板,要想应用到“添加新项”的对话框中,必须把模板copy到“[我的文档]\Visual Studio 2005\Templates\ItemTemplates”

我们可以看到一个模板文件就是一个zip文件,解压该文件,我们会看到三个文件,.ico, .cs, .vstemplate,ico是显示在“添加新项”对话框中显示的图标,.cs文件就是我们定义的模板原文件,而vstemplate文件,是一个xml文件,该文件定义了模板的元数据,对于Visual Studio 2005,该文件的schema文件保存在“[Visual Studio InstallDirectory]\Xml\Schemas\2052\vstemplate.xsd”中,下面是该文件的一个原型,

<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
<TemplateData>
<DefaultName>MyClassTemplate.cs</DefaultName>
<Name>MyClassTemplate</Name>
<Description>&lt;没有可用的说明&gt;</Description>
<ProjectType>CSharp</ProjectType>
<SortOrder>10</SortOrder>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<References />
<ProjectItem SubType="Code" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">MyClassTemplate1.cs</ProjectItem>
</TemplateContent>
</VSTemplate>

至于各个结点的说明,大家可以参考上面提到的schema文件,或者msdn(ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dv_vsxmlref/html/6f74a2d5-3811-43d6-8b10-eb5823ad8995.htm),在<TemplateContent>结点下有一个子结点<CustomParameters>,在该结点下,我们可以方便的定义自己的模板参数,如下,

<TemplateContent>
...
<CustomParameters>
<CustomParameter Name="$MyParameter1$" Value="MyValue1"/>
</CustomParameters>
...
</TemplateContent>

上面我们定义了一个参数$MyParameter1$,该参数的值为MyValue1,自定义的模板参数跟VS提供的默认模板参数的使用方法一样,我们可以直接在模板原文件中使用,如下所示: 

#region Copyright (C) Rainsoft All rights reserved
/*******************************************************************************************
* Creation:
* Author: $username$
* Date: $time$
* Description: $MyParameter1$
* Version:
* Modification:
* Author:
* Date:
* Description:
* Version:
******************************************************************************************
*/
#endregion

namespace $rootnamespace$
{
using System;

public class $itemname$
{
}
}

我们在Description中使用了我们刚才定义的模板参数$MyParameter1$,VS在根据该模板生成新项时,会自动的把我们定义的模板参数定义成相应的值,但这个值只能是静态的值,不能动态生成,比如在很多公司中登录windows的用户名可能是公司的内部员工编号,不适合作文件头定义中的Author项,通过定义模板参数,我们就可以解决这个问题,但对于自定义格式的Date项,这种方式还不行,下一篇文章我将提供最终的解决方法。