作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常有用的扩展点。这里我们主要关注Item Template,它时我们可以在“Add new Item”对话框中添加我们自定义的Item(如下图所示)。如果不了解Item Template,Scott Gu的文章

我们之前自定义了一些Item Template,最近想在.NET Core项目中使用它们,但是失败了。今天为了这个折腾得够呛,不过好在最后还是解决了——虽然解决方案仅仅是添加一行代码。

如果不了解Item Template定义文件的Schema,定义Item Template最简单的方式就是直接利用VS创建一个对应的项目。由于我们是针对.NET Core项目提供的Item Template,所以我们创建了一个.NET Core类库项目。作为演示,我们在项目中添加了如下一个Foobar.cs文件作为这个Item Template为目标项目添加的Item。

按照惯例,我们只需要选择菜单File->Export Template打开如下Template的导出向导。我们选择Item Template选项后进入下一步。

由于我们只要利用Item Template为目标添加Foobar.cs这个文件,所以我们只需选择这个文件即可。

选择默认选项知道完成向导,作为一个.zip文件将会出现在目录“%userprofile%Documents\Visual Studio 2015\My Exported Templates”目录下。

按照惯例,我们只需要将这个zip文件拷贝到%userprofile%Documents\Visual Studio 2015\Templates\ItemTemplates\.NET Core“目录下就可以了。但是为.NET Core项目添加Item的时候并没有看到它。

为此我们解压缩这个文件,查看它的”MyTemplate.vstemplate“文件,如下所示的就是该文件的内容。主要关注代表项目类型的<ProjectType>元素,我们看到它的值为 DNX。有人可能认为DNX是错误的项目类型,虽然DNX已经是个历史名次,但是VS目前依然使用它来表示.NET Core。

   1: <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">

   2:   <TemplateData>

   3:     <DefaultName>MyItem.cs</DefaultName>

   4:     <Name>MyItem</Name>

   5:     <Description>&lt;No description available&gt;</Description>

   6:     <ProjectType>DNX</ProjectType>

   7:     <SortOrder>10</SortOrder>

   8:     <Icon>__TemplateIcon.ico</Icon>

   9:   </TemplateData>

  10:   <TemplateContent>

  11:     <References />

  12:     <ProjectItem SubType="" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">Foobar.cs</ProjectItem>

  13:   </TemplateContent>

  14: </VSTemplate>

实际上除了需要制定<ProjectType>之外,我们还需要指定TemplateGroupID,并且将值设定为“SharedDotNetAndDotNetWeb”(表示普通的.NET Core类库项目和Web项目都适用)

   1: <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">

   2:   <TemplateData>

   3:     <DefaultName>MyItem.cs</DefaultName>

   4:     <Name>MyItem</Name>

   5:     <Description>&lt;No description available&gt;</Description>

   6:     <ProjectType>DNX</ProjectType>

   7:     <TemplateGroupID>SharedDotNetAndDotNetWeb</TemplateGroupID>

   8:     <SortOrder>10</SortOrder>

   9:     <Icon>__TemplateIcon.ico</Icon>

  10:   </TemplateData>

  11:   <TemplateContent>

  12:     <References />

  13:     <ProjectItem SubType="" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">Foobar.cs</ProjectItem>

  14:   </TemplateContent>

  15: </VSTemplate>

然后我们重新压缩打包并部署,

为.NET Core项目定义Item Template的更多相关文章

  1. NET Core项目定义Item Template

    NET Core项目定义Item Template 作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Te ...

  2. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  4. Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍 ...

  6. ASP.NET Core 项目简单实现身份验证及鉴权

    ASP.NET Core 身份验证及鉴权 目录 项目准备 身份验证 定义基本类型和接口 编写验证处理器 实现用户身份验证 权限鉴定 思路 编写过滤器类及相关接口 实现属性注入 实现用户权限鉴定 测试 ...

  7. .Net Core 项目中添加统一的XSS攻击防御过滤器

    一.前言 最近公司内部在对系统的安全进行培训,刚好目前手里的一个.net core 项目中需要增加预防xss的攻击,本文将大概介绍下何为XSS攻击以及在项目中如何统一的预防XSS攻击. 二.XSS简介 ...

  8. NET Core项目模板

    打造自己的.NET Core项目模板 https://www.cnblogs.com/catcher1994/p/10061470.html 前言 每个人都有自己习惯的项目结构,有人的喜欢在项目里面建 ...

  9. .Net Core 项目区域请求设置

    .net core 和asp.net MVC区域请求有个区别,这里重点记录一下 asp.net MVC 区域请求直接是/区域名称/控制名称/方法名称,其他不需要设置任何东西,而Core 项目这样请求路 ...

随机推荐

  1. Ubuntu下使用nvm

    写在前面:刚写着写着博客就跨年了,希望新的一年大家万事如意,一切向"前"看! 安装 wget -qO- https://raw.githubusercontent.com/crea ...

  2. Sublime Text3配置在可交互环境下运行python快捷键

    安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...

  3. C语言 · 矩阵乘法 · 算法训练

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  4. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  5. Xamarin+Prism开发详解五:页面布局基础知识

    说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...

  6. Linux学习之文件操作

    Linux,一起学习进步-    mkdir The mkdir command is used to create directories.It works like this: mkdir命令是用 ...

  7. 深入浅出Redis-redis哨兵集群

    1.Sentinel 哨兵 Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所 ...

  8. 脑洞大开之采用HTML5+SignalR2.0(.Net)实现原生Web视频

    目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 - -,我又来了,今天废话不多说,我们直接来实现Web视频聊天. 采用的技术如下: HTML5 WebRTC Si ...

  9. 卸载oracle之后,如何清除注册表

    之前卸载了oracle,今天偶然间发现,在服务和应用程序里面,还残存着之前的oracle服务.原来,还需要去清理下注册表. 在开始菜单的这个框里面 输入regedit,进入注册表.找到这个目录 HKE ...

  10. 页面布局class常见命名规范

    头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...