VS2019 自定义项目模板的实现方法

前言:

使用“宇宙最强IDE”开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下

VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出、审计日志、SwaggerUI、认证等,那么我们能否自定义项目模板来满足我们的需求呢?答案当然是肯定的

 那么接下来开始实现自定义项目模板的创建

一、自定义项目模板创建

 本次我们来创建一个实现了基础功能的webapi模板

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

 1、创建原始的项目(模板项目)

  创建WebApi项目:

  实现WebApi相关基础功能:SwaggerUI、认证、性能监控(MiniProfiler)等基础功能;可以在之前博客内容中查看实现具体方式

 2、替换模板项目的参数

  此时模板的基础功能已经实现,但是在创建项目时,会根据输入的项目名称;来设置代码中的命名空间、输出程序名称等信息。

  那么是如何实现的呢?——模板参数

  当前支持的内置项目参数如下表:(模板参数区分大小写。)

参数 说明
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 格式表示的当前年份。

  如:设置代码文件中命名空间定义:

namespace $safeprojectname$
{
     /// <summary>
    /// 作者:$username$
    /// 时间:$time$
    /// 机器名:$machinename$
    /// 项目名:$projectname$
    /// </summary>
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

  如代码中需要使用项目名称依旧采用$safeprojectname$;如:

public void ConfigureServices(IServiceCollection services)
{
    //注册Swagger生成器,定义一个和多个Swagger 文档
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "$safeprojectname$ API", Version = "v1" });
        // other
    });
}

  除了VS自带的模板参数外,用户还可以自定义模板参数,但现实用到的不多

 3、导出模板源项目,指定模板项目设置名称、说明、图标等内容

  模板基本内容实现完成后,则可以进行模板导出操作,步骤如下:

  A、进入菜单:项目->导出模板

  B、弹出:导出模板向导页面

  C、设置模板相关信息,点击完成;则模板创建成功

  输出位置为自定义模板导出存储位置;

  【自动将模板导入 Visual Studio】选项,选中后会将项目模板复制一份,放入到特定的文件夹中,下次建立新项目就可以搜索使用。

 4、模板项目添加语言、平台和项目类型等标签

  前面的步骤已经完成对模板的创建,但是在创建项目时,可以根据项目平台、语言、项目类型标签过滤,那么如何实现项目模板标签呢?

  接下来对3步骤中生成的项目模板进行研究:

  打开模板文件的压缩文件中发现了模板文件

  解压文件后,对该文件进行编辑,添加语言标签(LanguageTag)、平台标签(PlatformTag)、项目类型标签(ProjectTypeTag):  

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <!--项目名称-->
    <Name>ApiTemplate</Name>
    <!--项目描述-->
    <Description>基础API模板:支持SwaggerUI、认证、性能监控等基础功能</Description>
    <!--项目类型-->
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <!--指定在实例化项目时是否创建包含文件夹。-->
    <CreateNewFolder>true</CreateNewFolder>
    <!--缺省名称-->
    <DefaultName>ApiTemplate</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <CreateInPlace>true</CreateInPlace>
    <!--语言标签-->
    <LanguageTag>CSharp</LanguageTag>
    <LanguageTag>Javascript</LanguageTag>
    <!--平台标签-->
    <PlatformTag>Windows</PlatformTag>
    <PlatformTag>Linux</PlatformTag>
    <!--项目标签-->
    <ProjectTypeTag>Web</ProjectTypeTag>
    <!--图标-->
    <Icon>__TemplateIcon.png</Icon>
    <PreviewImage>__PreviewImage.png</PreviewImage>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="ApiProjectTemplates.csproj" File="ApiProjectTemplates.csproj" ReplaceParameters="true">
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="launchSettings.json">launchSettings.json</ProjectItem>
      </Folder>
      <Folder Name="Controllers" TargetFolderName="Controllers">
        <ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecastController.cs">WeatherForecastController.cs</ProjectItem>
      </Folder>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.json">appsettings.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="appsettings.Development.json">appsettings.Development.json</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="JwtSetting.cs">JwtSetting.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="Startup.cs">Startup.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="WeatherForecast.cs">WeatherForecast.cs</ProjectItem>
    </Project>
  </TemplateContent>
</VSTemplate>

  下表是 Visual Studio 中可用的以上描述标签的取值内容:

语言标签(LanguageTag) 平台标签(PlatformTag) 项目类型标签(ProjectTypeTag)
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)

  最后将修改的文件打包成zip压缩(必须为zip文件)文件后,复制到项目模板所在位置(%USERPROFILE%\Documents\Visual Studio 2019\Templates\ProjectTemplates)    

二、 自定义项目模板使用

 前面步骤已完成模板创建,接下来就验证模板是否生效:

 打开vs进入项目创建界面,搜索API,如下:

 

 到此项目设置的标签以及代码中命名空间、注释都已生效。项目模板效果已实现

三、总结:

 所有项目模板和项模板(无论是与 Visual Studio 一起安装的还是由你创建的)均通过使用相同的原则工作并具有类似的内容。所有模板均包含以下项:

使用模板时要创建的文件。这些文件包括源代码文件、嵌入资源、项目文件等。一个 .vstemplate 文件,其中包含根据模板创建项目或项以及在“创建新项目”页面或“添加新项”对话框中显示模板所需的元数据。当这些文件压缩成 .zip 文件并放在正确的文件夹时,Visual Studio 将自动在以下位置显示这些文件:在“创建新项目”页面中显示项目模板。在“添加新项”窗口中显示项模板。

 项目模板作用非常大,可以将日常积累的功能合并在模板中,可以避免项目开发中重复造轮子,提高开发效率

参考内容

 https://docs.microsoft.com/zh-cn/visualstudio/ide/creating-project-and-item-templates?view=vs-2019

 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vsix-project-template?view=vs-2019

 https://docs.microsoft.com/zh-cn/visualstudio/extensibility/vstemplate-element-visual-studio-templates?view=vs-2019

到此这篇关于VS2019 自定义项目模板的文章就介绍到这了,更多相关VS2019 自定义项目模板内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • VsCode里的Vue模板的实现

    如何自定义自己的开发模板?你需要这几步: 点击VsCode左上角的"文件" : 找到 "首选项" 并点击首选项里的 "用户片段": 输入 "vue.json" 点击进入该文件 现在你就能编辑自己的Vue页面开发模板了! 下面是我的模板代码: { "Print to console": { "prefix": "vue", "body": [ &qu

  • 在vs code 中如何创建一个自己的 Vue 模板代码

    首先,在vs code 中打开定义模板代码的地方 第一步,点击"设置"图标按钮,在弹出的菜单中点击的"用户代码片段"(也就是模板) 第二步,在弹出的框中选择新建代码片段(可选为 全局/现在的项目 创建模板) 第三步,输入要新建的模板名称,然后,回车(这里我已经新建过了) 然后会自动打开下面这个页面,在这里我们就可以开始新建一个vue模板了 现在我们开始创建我们的模板了 这是一个模板例子 需要的可以直接拷贝到新建的模板文件中,然后按自己的风格改改 { "Pr

  • 使用vscode快速建立vue模板过程详解

    当我们希望每次新建.vue文件后,vscode能够根据配置,自动生成我们想要的内容. 打开vscode编辑器,依次选择"文件 -> 首选项 -> 用户代码片段",此时,会弹出一个搜索框,我们输入vue,将代码ctrl+c 到vue-html.json { "Print to console": { "prefix": "vue", "body": [ "<!-- $0 -->

  • vscode vue 文件模板的配置方法

    1. 安装VueHelper插件 2. 寻找 vue.json 按顺序点击vscode的: 文件 首选项 用户代码片段 接着搜索框中输入 vue, 回车 3. 填写模板内容 直接复制一下内容到 vue.json { "Print to console": { "prefix": "vue", "body": [ "<template>", " <div>\n",

  • vs.net2008添加模板方法

    /* ************************************************ author :author * email  :  .......@163.com * function: * create or update:     $time$ * ***********************************************/ D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Item

  • Vscode中快速创建自定义代码模板的方法

    Vscode中快速创建自定义代码模板 一招鲜,吃遍天,学会了这个在Vscode中快速创建自定义代码模板的教程,我相信创建其它代码模板的方法你也就通个七七八八了. 我就以Vue的创建为例,不过我这个Vue是在HTML中创建的. 初学Vue,我们一般都是在.html文件中引入vue包,然后编写自己的vue代码. 盲目的跟着网上那些教程创建Vue模板是行不通的. 因为我们创建的模板是在.html文件下,所以我们的模板也得是在html.json中来进行编写. 教程如下: 图文并用,理解更清晰到位! 在V

  • 在VScode中创建你的代码模板的方法

    使用VScode的用户代码片段功能,来生成自己习惯的代码模板,提升开发效率 1.选择菜单里的 文件 > 首选项 > 用户代码片段 2.选择你需要自定义模板的文件,以vue为例 3. 配置对应文件json 把代码片段写在json里.每个代码段都是在一个代码片段名称下定义的,并且有prefix.body和description.prefix是用来触发代码片段的.使用 $1,$2 等指定光标位置,这些数字指定了光标跳转的顺序,$0表示最终光标位置. { "vue-template"

  • vscode自定义vue模板的实现

    用vscode编辑器创建vue模板,再也不用每次新建vue文件的时候都去一遍遍的重复敲某些代码片段.输入 vue 再按回车键,即可生成自定义的vue文件内容,相当的好使,开发效率蹭蹭的上去了. 打开vscode,选择文件 > 首选项 > 用户片段.随后在出现的输入框内输入vue,按回车键.打开了一个叫vue.json的文件.如图: 图片内容已经是添加了相应的模板内容了,解释下,prefix字段表示的是自定义指令,就是我们在vue文件里面输入的vue标签,按回车即可生成自定义的文件内容:body

  • VS2019 自定义项目模板的实现方法

    前言: 使用"宇宙最强IDE"开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出.审计日志.SwaggerUI.认证等,那么我们能否自定义项目模板来满足我们的需求呢?答案当然是肯定的 那么接下来开始实现自定义项目模板的创建 一.自定义项目模板创建 本次我们来创建一个实现了基础功能的webapi模板 创建自定义的项目模板,有以下几个步骤: 1.创建原始的项目(模板项目) 创建WebApi项目: 实

  • ASP.NET如何自定义项目模板详解

    前言 在微服务架构盛行的时代,一言不合就新建一个服务,虽然搭建服务并没什么难度,但不可避免的是每个人搭建出来的架子会存在差异,这很合理,因为每个开发者的个人风格.工作经验都不一样,难免认为自己喜欢的才是最好的.另一方面,如果需要较频繁搭建服务,这些重复而没难度的操作就显得浪费时间,而且每次手动处理总可能存在一些细节上的失误,出现异常然后花时间解决更得不偿失. 面对以上一些问题,拥有一个符合自己团队的项目模板就显得比较重要了,这篇文章主要介绍在 ASP.NET 如果自定义项目模板. 内置的项目模板

  • .NET Core自定义项目模板的全过程

    前言: 前面介绍 自定义项目模板 中介绍了一种简单的方式--通过创建项目导出为项目模板方式实现.本次将采用dotenet cil(手脚架)来创建项目模板. 那么,我们首先看下当前dotnet 支持的项目模板: 可以看到当前dotnet中已经提供了很多模板项目,那么如何根据项目开发的积累内容通过dotnet cli创建一个自己的项目来提升开发效率呢? 1.实现自定义项目模板 自定义模板项目模板肯定就需要模板实现,本次就使用使用之前文章中项目结构作为模板项目来实现自定义项目模板 接下跟着步骤来创建模

  • Intellij IDEA如何自定义注释模板的实现方法

    想栈长我当初从 Eclipse 转用 IDEA 真是纠结,放弃然后尝试了N次,不过现在已经算是转型成功了,可以完全脱离 Eclipse 撸码了,虽然说我现在真的撸得非常少了.. 说到 IDEA 的痛点,我觉得注释配置就不是很人性化.Eclipse 可以很方便的设置和导入公共的自定义注释模板.格式化模板,但在 IDEA 中确实有点蹩脚,配置起来甚至有点高级,还需要用到 Grovvy 脚本.. 废话不说了,来看下如何解决 Intellij IDEA 最头大的问题:自定义注释模板.. IDEA 中有以

  • AndroidStudio4.1 自定义模板的使用方法

    AndroidStudio4.0之前,可以在template的文件夹里使用freemarker的自定义模板,可以在AndroidStudio的文件夹中,随意的添加适合自己的自定义模板 但是从4.1版本开始提供新的方式,Geminio,用Kotlin的形式编写新的template,而且需要使用插件的形式,才能使用自定义的模板,摸索了好几天,终于解决了. 我的项目是使用MVVM的开发框架,每次在编写一个新的页面的时候,就需要新建四个文件Activity/Fragment, ViewModel, Re

  • 对Pycharm创建py文件时自定义头部模板的方法详解

    如下所示: # -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: ${NAME} Description : Author : ${USER} date: ${DATE} ------------------------------------------------- Change Activity: ${DATE}: ----------------

  • 详解使用DotNet CLI创建自定义的WPF项目模板

    本文主要介绍了使用DotNet CLI创建自定义的WPF项目模板,分享给大家,具体如下: 描述 当我们安装完 DotNetCore 3.0 版本的 SDK 后,我们就可以创建基于 DotNetCore 的 WPF 项目模板,通过如下 CLI 可以方便快捷的创建并运行我们的项目: dotnet new wpf -n WpfApp cd WpfApp dotnet restore dotnet run 做过 WPF 开发的朋友都知道,这个项目模板肯定不符合我们的预期,我们希望我们的项目模板能够加入

  • VUE 自定义组件模板的方法详解

    本文实例讲述了VUE 自定义组件模板的方法.分享给大家供大家参考,具体如下: 先说下需求吧,因为客户的用户群比较大,如果需求变动,频繁更新版本就需要重新开发和重新发布,影响用户的体验,考虑到这一层就想到,页面展示效果做动态可配,需求更新时,重新配置一份模板录入到数据库,然后根据用户选择的模板进行展示. 关于页面展示做的动态可配,我是参考vue的Component组件方式,开始时可能会遇到组件定义后不能加载的情况,并在控制台如下错误:You are using the runtime-only b

  • Android单项绑定MVVM项目模板的方法

    0.前言 事情还要从上周和同事的小聚说起,同事说他们公司现在app的架构模式用的是MVP模式,但是并没有通过泛型和继承等一些列手段强制使用,全靠开发者在Activity或者Fragment里new一个presenter来做处理,说白了,全靠开发者自觉.这引发了我的一个思考,程序的架构或者设计模式的作用,除了传统的做到低耦合高内聚,业务分离,我觉得还有一个更重要的一点就是用来约束开发者,虽然使用某种模式或者架构可能并不会节省代码量,有的甚至会增加编码工作,但是让开发者在一定规则内进行开发,保证一个

  • springboot结合mybatis-plus快速生成项目模板的方法

    目录 mybatis-plus简介: 项目模板 1.项目概览 2.美化swagger-ui mybatis-plus简介: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生.这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网.那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA. 项目

随机推荐