用Visual Studio2019自定义项目模板
项目模板简介
众所周知,在我们使用VS新建项目时,都需要选择一个项目模板,如下图:

我们选择完项目模板进行创建,创建完成之后,可以发现项目中已经包含了一些基础的文件。例如MVC:

可以看到,MVC项目下,这么多的文件、类都给我们自动生成了,我们并不需要敲任何代码。
所以,项目模板,就是在我们创建新项目界面中,给我们列出来的模板文件。
这些文件都是VS自带的,但在实际工作中,很多时候我们需要的是一个跟我们项目的业务更加契合的、可复用的项目模板,这时候就需要我们自己去创建一个自定义的项目模板了。
项目模板创建步骤
创建自定义的项目模板,有以下几个步骤:
- 创建一个原始的项目,我们称之为模板源;
- 替换模板参数
- 导出模板源项目, 给模板项目设置名称、说明、图标等内容
- 给项目模板添加语言、平台和项目类型等标签
- 使用自定义的项目模板
创建模板源项目
首先我们创建一个原始的项目。
以下是我创建的Demo,添加了几个文件,只是用来做一个简单的例子,实际开发中可能比这复杂的多。
模板中的参数
我们创建出来的模板源项目,有很多内容在创建项目之前是不确定的,比如命名空间、类名称等,这怎么办呢?
VS也给了我们解决办法,我们可以在源项目中,使用模板参数来代替这些不确定的信息,在实际创建项目时,VS会将这些模板参数替换为实际的内容。
以HomeController.cs文件为例,使用模板参数代替命名空间名称:

模板参数以 $参数$ 的格式进行声明 。$safeprojectname$表示的
就是命名空间的模板参数。
VS完整的模板参数如下:
| 参数 | 描述 |
|---|---|
| clrversion | 公共语言运行时 (CLR) 的当前版本。 |
| ext_* | 将 ext_ 前缀添加到任何参数,以引用父模板的变量。 例如 ext_safeprojectname。 |
| guid[1-10] | 一个用于替换项目文件中的项目 GUID 的 GUID。 可指定最多 10 个唯一的 GUID(例如,guid1)。 |
| itemname | 在其中使用参数的文件的名称。 |
| machinename | 当前的计算机名称(例如,Computer01)。 |
| projectname | 创建项目时由用户提供的名称。 |
| registeredorganization | 来自 HKLM\Software\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 的注册表项值。 |
| rootnamespace | 当前项目的根命名空间。 此参数仅适用于项模板。 |
| safeitemname | 与 itemname 相同,但所有不安全字符和空格替换为了下划线。 |
| safeitemrootname | 与 safeitemname 相同。 |
| safeprojectname | 用户在创建项目时提供的名称,但名称中删除了所有不安全字符和空格。 |
| time | 以 DD/MM/YYYY 00:00:00 格式表示的当前时间。 |
| specifiedsolutionname | 解决方案的名称。 在选中“创建解决方案目录”时,specifiedsolutionname 具有解决方案名称。 在未选中“创建解决方案目录”时,specifiedsolutionname 为空。 |
| userdomain | 当前的用户域。 |
| username | 当前的用户名称。 |
| webnamespace | 当前网站的名称。 此参数在 Web 窗体模板中用于保证类名是唯一的。 如果网站在 Web 服务器的根目录下,则此模板参数解析为 Web 服务器的根目录。 |
| year | 以 YYYY 格式表示的当前年份。 |
除了VS自带的模板参数外,用户还可以自定义模板参数,但实际用到的不多,在此就不扩展赘述了。
导出模板
源文件中的模板参数替换好之后,我们就可以导出模板了,操作步骤如下:
打开工具栏中的项目->选择导出模板
弹出【导出模板向导】界面,选择项目模板即可,下方选择的是要导出的项目。
接下来,在模板选项中,填入模板的名称,说明,图标等信息:
注意这个输出位置,这是自定义项目模板存放的路径。
下面的【自动将模板导入 Visual Studio】选项,选中后会将项目模板复制一份,放入到特定的文件夹中,下次创建新项目就可以搜索到了。
点击完成,VS会把项目模板压缩为.zip文件,分别导入到以下两个文件夹中:C:\Users\Lenovo\Documents\Visual Studio 2019\My Exported Templates
C:\Users\Lenovo\Documents\Visual Studio 2019\Templates\ProjectTemplates
这时候不需要任何其他的操作,打开VS的启动窗口,点开创建新项目,就可以找到ProjectTemplateDemo这个项目模板了。
下面使用这个模板创建一个项目

可以看到,项目的结构与我们项目模板一模一样,命名空间名称也被替换为Demo1了。
给项目模板添加标签
其实到这一步,我们的项目模板就可以正常使用了,但我们会发现一个问题,我们的项目模板没有这样的标签:
虽然不影响使用,但当查找项目模板时,也不是很方便,所以我们需要给创建的项目模板添加几个对应的标签。方法如下:
首先打开这个模板导入到的文件夹,路径:C:\Users\Lenovo\Documents\Visual Studio 2019\Templates\ProjectTemplates
解压ProjectTemplateDemo这个压缩包。
在解压好的ProjectTemplateDemo文件夹里,用VS打开MyTemplate.vstemplate这个文件。

这是一个XML文件,我们需要在TemplateData标签里添加上项目使用语言、平台、项目类型的信息。
语言、平台、项目类型的标签分别为LanguageTag、PlatformTag、ProjectTypeTag。
同时,Visual Studio 提供了一系列内置标签。以下列表是 Visual Studio 中可用的内置标签,对应的值显示在括号中。
| 语言标签 | 平台标签 | 项目类型标签 |
|---|---|---|
| C (cpp) | Android (android) | 云 (cloud) |
| 单元格 | 单元格 | 单元格 |
| C# (csharp) | Azure (azure) | 控制台 (console) |
| F# (fsharp) | iOS (ios) | 桌面 (desktop) |
| Java (java) | Linux (linux) | 扩展 (extension) |
| JavaScript (javascript) | macOS (macos) | 游戏 (games) |
| Python (python) | tvOS (tvos) | IoT (iot) |
| 查询语言 (querylanguage) | Windows (windows) | 库 (library) |
| TypeScript (typescript) | Xbox (xbox) | 机器学习 (machinelearning) |
| Visual Basic (visualbasic) | 移动 (mobile) | |
| Office (office) | ||
| 其他 (other) | ||
| 服务 (service) | ||
| 测试 (test) | ||
| UWP (uwp) | ||
| Web (web) |
我们修改这个文件,添加几个对应的标签:

我们把这个文件保存一下,保存之后,跳到文件夹下,全选文件,重新压缩一遍修改好的ProjectTemplateDemo文件:

注意,压缩包必须是.zip文件。
压缩完成后,把这个压缩包拷贝到C:\Users\Lenovo\Documents\Visual Studio 2019\Templates\ProjectTemplates目录下,并覆盖掉旧的压缩包。
然后删除解压后的文件。
这时候重新创建新项目,选择ProjectTemplateDemo项目模板,可以看到我们的标签已经加上去了。
至此,就是自定义项目模板的全部步骤。
总结
自定义的项目模板作用非常大,在大型的项目中,如果使用好的话会大大提升我们的开发效率。
以上就是本文章的全部内容。更多内容可访问我的博客:http://www.yunc.top/
用Visual Studio2019自定义项目模板的更多相关文章
- [Visual Studio] 自定义项目模板(.vsix扩展)
VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...
- Visual Studio 自定义项目模板
经常我们需要新建一个项目,然后新建我们的View文件夹,ViewModel文件夹,Model文件夹,还有把我们的ViewModelBase放入我们的VIewModel,如果还用框架,还需要加上好多. ...
- 如何利用 Visual Studio 自定义项目或工程模板
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...
- VS自定义项目模板:[2]创建VSIX项目模板扩展
VS自定义项目模板:[2]创建VSIX项目模板扩展 听语音 | 浏览:1237 | 更新:2015-01-02 09:21 | 标签:软件开发 1 2 3 4 5 6 7 分步阅读 一键约师傅 百度师 ...
- DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解
关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...
- Visual Studio 自定义项目或工程模板
如何利用 Visual Studio 自定义项目或工程模板 在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志 ...
- 如何利用 Visual Studio 自定义项目或工程模板(转载)
在开发项目的时候,由其是商业性质的大型项目时,往往需要在每个代码文件上都加上一段关于版权.开发人员的信息,并且名称空间上都需要带有公司的标志.这个时候,是选择在开发的时候手动添加还是自动生成呢? 我们 ...
- VS2019 自定义项目模板
前言: 使用"宇宙最强IDE"开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出.审计日 ...
- .NET Core - 自定义项目模板
前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式--通过创建项目导出为项目模板方式实现.本次将采用dotenet cil(手脚架)来创建项目模板. 那么,我们首先看下当前dotnet 支持的项 ...
随机推荐
- Daily Scrum 12/17/2015
Process: Zhaoyang:完成了相册图片的异步加载. Yandong&Dong: 对Azure的体系架构进行学习和相应的编程. Fuchen: 对Oxford计划中的NLP接 ...
- Oracle使用fy_recover_data恢复truncate删除的数据
(一)truncate操作概述 在生产中,truncate是使用的多的命令,在使用不当的情况下,往往会造成表的数据全部丢失,恢复较为困难.对于truncate恢复,常见的有以下几种方法可以进行恢复: ...
- mybatis源码配置文件解析之二:解析settings标签
在前边的博客中分析了mybatis解析properties标签,<mybatis源码配置文件解析之一:解析properties标签>.下面来看解析settings标签的过程. 一.概述 在 ...
- Python 代码编辑器怎么选?PyCharm、VS Code、Jupyter Notebook 都各有特色
Python 代码编辑器怎么选?PyCharm.VS Code.Jupyter Notebook 都各有特色,Jupyter 适合做数据分析这些需要可视化的操作,PyCharm 更适合做完整的 Pyt ...
- 实体识别中,或序列标注任务中的维特比Viterbi解码
看懂这个算法,首先要了解序列标注任务 QQ522414928 可以在线交流 大体做一个解释,首先需要4个矩阵,当然这些矩阵是取完np.log后的结果, 分别是:初始strat→第一个字符状态的 ...
- Spring基于注解@Required配置
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- 箭头函数的this指向问题-一看就懂
OK,对于箭头函数的this 用一句话概括:箭头函数中的this指向的是定义时的this,而不是执行时的this. 如果上面这句话听的是懂非懂或者完全不懂的,没关系,下面会有案例讲解. 举个栗子 来看 ...
- 高德地图首席科学家任小枫QA答疑汇总丨视觉+地图技术有哪些新玩法?
上周,阿里巴巴高德地图首席科学家任小枫在#大咖学长云对话#的在线直播活动上就计算机视觉相关技术发展以及在地图出行领域的应用与大家做技术交流,直播间互动火爆,尤其在QA环节,学弟学妹们纷纷就感兴趣的视觉 ...
- 13206抢票代码 py
抢票代码 https://github.com/Bingshuli/12306Python 谷歌驱动 http://chromedriver.storage.googleapis.com/index. ...
- 十七, Oracle索引约束
管理索引-原理介绍 索引是用于加速数据存取的数据对象.合理的使用索引可以大大降低i/o次数,从而提高数据访问性能. 单列索引 适当的索引对于大型数据库的性能有不错的提升, 但在创建索引时要小心.选择字 ...