zoukankan      html  css  js  c++  java
  • 用Visual Studio2019自定义项目模板

    项目模板简介

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

    创建新项目

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

    MVC默认的文件架构

    可以看到,MVC项目下,这么多的文件、类都给我们自动生成了,我们并不需要敲任何代码。

    所以,项目模板,就是在我们创建新项目界面中,给我们列出来的模板文件。

    这些文件都是VS自带的,但在实际工作中,很多时候我们需要的是一个跟我们项目的业务更加契合的、可复用的项目模板,这时候就需要我们自己去创建一个自定义的项目模板了。

    项目模板创建步骤

    创建自定义的项目模板,有以下几个步骤:

    1. 创建一个原始的项目,我们称之为模板源;
    2. 替换模板参数
    3. 导出模板源项目, 给模板项目设置名称、说明、图标等内容
    4. 给项目模板添加语言、平台和项目类型等标签
    5. 使用自定义的项目模板
    创建模板源项目

    首先我们创建一个原始的项目。
    以下是我创建的Demo,添加了几个文件,只是用来做一个简单的例子,实际开发中可能比这复杂的多。
    模板源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 来自 HKLMSoftwareMicrosoftWindows NTCurrentVersionRegisteredOrganization 的注册表项值。
    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:UsersLenovoDocumentsVisual Studio 2019My Exported Templates
    自定义模板默认的存放路径

    C:UsersLenovoDocumentsVisual Studio 2019TemplatesProjectTemplates
    VS导入自定义模板的目录

    这时候不需要任何其他的操作,打开VS的启动窗口,点开创建新项目,就可以找到ProjectTemplateDemo这个项目模板了。
    选择自定义的项目模板
    下面使用这个模板创建一个项目
    创建自定义的项目模板

    使用自定义项目模板创建的项目
    可以看到,项目的结构与我们项目模板一模一样,命名空间名称也被替换为Demo1了。

    给项目模板添加标签

    其实到这一步,我们的项目模板就可以正常使用了,但我们会发现一个问题,我们的项目模板没有这样的标签:
    没有高大上的标签?
    虽然不影响使用,但当查找项目模板时,也不是很方便,所以我们需要给创建的项目模板添加几个对应的标签。方法如下:

    首先打开这个模板导入到的文件夹,路径:C:UsersLenovoDocumentsVisual Studio 2019TemplatesProjectTemplates
    VS读取的自定义项目模板目录

    解压ProjectTemplateDemo这个压缩包。
    在解压好的ProjectTemplateDemo文件夹里,用VS打开MyTemplate.vstemplate这个文件。
    打开项目模板XML文件

    项目模板配置项

    这是一个XML文件,我们需要在TemplateData标签里添加上项目使用语言、平台、项目类型的信息。
    语言、平台、项目类型的标签分别为LanguageTagPlatformTagProjectTypeTag
    同时,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:UsersLenovoDocumentsVisual Studio 2019TemplatesProjectTemplates目录下,并覆盖掉旧的压缩包。
    然后删除解压后的文件。
    这时候重新创建新项目,选择ProjectTemplateDemo项目模板,可以看到我们的标签已经加上去了。
    带标签的自定义项目模板

    至此,就是自定义项目模板的全部步骤。

    总结

    自定义的项目模板作用非常大,在大型的项目中,如果使用好的话会大大提升我们的开发效率。

    以上就是本文章的全部内容。更多内容可访问我的博客:http://www.yunc.top/

  • 相关阅读:
    渲染管线中的顶点变换
    导入图片时设置默认格式
    查找丢失组件的预制体
    移动到目标点的方法
    关于material和sharedMaterial的问题
    代码创建动画状态机
    设计模式学习笔记--访问者模式
    .net core 基于Dapper 的分库分表开源框架(core-data)
    .Net 微服务架构技术栈的那些事
    Asp.Net Core 中IdentityServer4 实战之角色授权详解
  • 原文地址:https://www.cnblogs.com/aoede-jacqueline/p/vs-project-template.html
Copyright © 2011-2022 走看看