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

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

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

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

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

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

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

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

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

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

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

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

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

如果我们定义的参数不是内置的,我们该怎么传递值呢。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>

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

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

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

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

转载于:https://www.cnblogs.com/hurenwang/archive/2011/12/15/2289003.html

项目模板参数化(上)相关推荐

  1. Android项目模板化

    目录地址 首先了解模板的文件结构,先看一个自带的模板"Empty Activity",目录地址是plugins/android/lib/templates/,里面就有我们需要的模板 ...

  2. 如何在阿里云物联网平台上利用已有的 IoT Studio项目模板创建项目

    目录 前言 一.在阿里云找到已有的IoT Studio公开项目模板 二.选择公开项目模板 三.其他选择 结语 前言 前面的文章里,我们介绍了如何在阿里云物联网平台上添加LoRa节点设备,并让LoRa节 ...

  3. maven java archetype_使用Maven Archetype创建Java项目模板

    1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...

  4. 使用Maven Archetype创建Java项目模板

    1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...

  5. Maven 项目模板

    Archetype介绍 Archetype是一个Maven项目的模板工具包,它定义了一类项目的基本架构.Archetype为开发人员提供了创建Maven项目的模板,同时它也可以根据已有的Maven项目 ...

  6. 项目怎么放到服务器里,如何把项目放到服务器上

    如何把项目放到服务器上 内容精选 换一换 欢迎使用华为云开发者工具套件(Python SDK).Python SDK让您轻松编程即可访问云服务.本教程介绍如何安装和使用Python SDK,并提供示例 ...

  7. 通过Visual Studio 2005的项目模板来加速开发过程

    page by Ameet Phadnis Feedback     简介: 记得在我第一次做项目的时候,我就在尝试找出一种方法来提高项目开始的效率(jump start my projects).在 ...

  8. SpringBoot 项目模板:摆脱步步搭建

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 本文作者 ...

  9. 后端开发实践:Spring Boot项目模板

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 作者 ...

最新文章

  1. AI目前的根本问题——缺乏 自由意志,无法分辨真正的善恶
  2. qtreeview 点击二级节点弹出dialog_Flutter Toast、弹出提示、轻提示
  3. parted如何将磁盘所有空间格式化_CentOS下大于2T的硬盘格式化问题
  4. java hashmap 缓存
  5. 组图:1904年圣路易斯奥运会
  6. 年买笔记本的8个小技巧 最适合自己才最好(组图)
  7. C10K 非阻塞 Web 服务器
  8. golang中package的4种导入方式
  9. java获取网络图片_做个看图片的App玩玩_第一篇
  10. 获取CPUID序列号的两种办法
  11. Studio One5新版一键下载安装教程
  12. 苹果手机投影到墙上_隔空触控的投影仪,仅有巴掌大小
  13. 怎么为PE添加输入法
  14. java学生成绩分90及格_Java基础练习:题目:利用条件运算符的嵌套来完成此题:学习成绩=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。 - 菜鸟头头...
  15. 安装arcgis的时候应用程序无法正常启动0xc000007b解决方法
  16. MySQL基础学习(尚硅谷 婷姐)自学笔记_001
  17. 长沙到底有没有互联网?
  18. Python——使用OGR操作矢量数据
  19. 【面试题】CSS 中几种最常用的水平垂直居中的方法
  20. 医号馆基层医疗信息化管理软件升级更新!

热门文章

  1. mysql日期函_mysql日期函数
  2. css 毛玻璃_css揭秘-视觉效果
  3. 币安跨链桥在BSC、以太坊和IoTeX主网全面支持IOTX资产
  4. OSL创始人登上美国知名电视节目宣传DeFi引关注
  5. 赛锐信息:SAP系统用户账号类型介绍
  6. 关系网络实战|设备关联信息定位团伙欺诈
  7. LivePlayer.js免费直播、点播播放器如何自适应div宽高集成播放视频
  8. spring boot test [ 2.0.6.RELEASE version ]
  9. [T-ARA][놀아볼래?][要玩吗]
  10. linux 访问windows 共享文件