项目模板参数化(上)

如果我们希望之前的那个项目模板更加实用,比如代码加个版权信息,包括创建时指定的项目名称,创建时间。该怎么办呢?实际上,Visual Studio的项目模板就有这样的一种机制,我个人把它定义为“参数化”机制。

让我们先看一个图,很简单

clip_image001[4]

可以看到,我这里定义的“参数化”是指一个动态的过程,包括项目模板的准备阶段的“参数格式化”,和模板实例化时的附加动作“参数替换”。

参数格式化:在准备阶段(即制作“项目模板源”),我们可以在任意的源文件中,附加一些参数占位符,占位符的格式是 $参数名称$ ,参数名称是大小写敏感的,Visual Studio自己的模板机制只认识这种格式的参数。

参数替换:参数替换是参数化的执行阶段,也是这篇文章的重点,我总结了一下,Visual Studio 的模板有三种参数替换的方式,借助于这些方式,可以让模板的实例化成为现实。

方式一:系统保留的内置参数替换

Visual Studio有一些内置的参数可供我们使用,只要我们在源文件中定义的占位符参数和内置参数名称一致,IDE就会自动帮我们执行参数替换,下表是内置参数列表,摘自MSDN:

 

image

我们这里只做一个小实验,看看这些参数替换的结果,我们在之前的模板源里,添加一个BuildInParameterExperiment.txt文件,把这些内置的参数放在里面,让IDE帮我们执行替换,注意一点,这里需要把itemname,safeitemname,rootnamespace这三个排除掉,因为它们是用于项模板的。

同时,WebClient.vstemplate要用ProjectItem节点添加这个新的源文件,而且ReplaceParameters设置为true,告诉Visual Studio,我们要检索这个源文件中的参数,让Visual Studio帮助我们完成参数值的替换。 

<ProjectItem ReplaceParameters="true">BuildInParameterExperiment.txt</ProjectItem>


最后打包和部署模板,利用这个模板新建项目,结果为: 
image

这种方式的局限:即因为它是内置的,也只局限于一些最简单和通用的参数。

方式二:自定义参数以及传递

如果我们定义的参数不是内置的,我们该怎么传递值呢。Visual Studio模板提供了传递自定义参数值的功能。

首先,我们新建一个新的CustomParameterExperiment.txt文件,并且定义两个参数,这里的名字是自己选的: 
DeveloperName          =        $DeveloperName$ 
ApplicationName         =        $ApplicationName$
 

好了,下面我们要做的事情是告诉Visual Studio这些参数的值,让Visual Studio在模板实例化阶段,能够用这些值将我们自定义参数替换掉。怎么做?很简单,将参数添加到TemplateContent节点下的CustomParameters集合下即可。

<CustomParameters>
  <CustomParameter Name="$DeveloperName$" Value="Ethan Woo"/>
  <CustomParameter Name="$ApplicationName$" Value="Two Layer Template Parameter Experiment Application"/>
</CustomParameters>


重新打包和部署,利用这个模板新建项目实例,看到结果:

clip_image003[4]

这种方式的局限:很明显,就是参数值是写死了的,实际需求往往是需要和用户进行交互,捕捉到用户的输入,然后处理。能办到吗?答案是肯定的,必须相信微软!

为了增强易读性,将这个方式放到下一篇专门阐述。

 

摘自:http://www.ethan-woo.com/post/2011/05/02/VisualStudio-Template-Parameterization-First.aspx

posted @ 2011-12-15 15:50  WarrenHu  阅读(357)  评论(0编辑  收藏  举报