vstemplate关键点纪要
经过多次的实验,终于完美生成一个.VSIX的项目模板安装包,其中遇到不少问题与挫折,久经google/baidu/自行摸索.终于解决所有问题.
现将心得记录总结如下
关于.vstemplate
1.可以通过导出模板直接生成.vstemplate及其他项目文件,以作为 模板的母版! 建议复制一份csprj文件做.vstemplate里面引用的模板项目文件.
2.TargetFileName/TargetFolderName可以根据需要进行修改甚至替换成变量,但是原文件名及目录名必须存在
3./Project[@TargetFileName]的csproj生成出来的项目文件,语法必须正确,否则不但无法生成项目,错误提示也容易让人误以为是.vstemplate出错
4.关于<CustomParameters>,必须放在</Project> 之后,</TemplateContent>之前(schema定义了顺序)
5.通过菜单栏导出的项目,生成在 %Userprofile%\Documents\Visual Studio 2012\Templates\My Exported Templates\, 压缩项目文件为zip时,根目录必须包含.vstemplate,否则无法出现在VS 模板项目选择界面中
6.zip后的模板项目文件,需要放 %Userprofile%\Documents\Visual Studio 2012\Templates\ProjectTemplates 方可被VS识别.
7. AssemblyInfo.cs文件也要挪出Properties目录,并在.vstemplate 修改如下
<ProjectItem ReplaceParameters="true" TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
8.vstemplate项目的.cs文件,由于被$变量替换$,正常生成会提示大量错误信息.因此需要将所有.cs的"文件属性--生成操作"设置为"无".
或者在sln解决方案文件中,"配置属性"中设置该项目为不生成(不推荐使用该方法)
9.可以附加上一个.bat批处理文件.内容如下
cd /d %1
"C:\Program Files\HaoZip\haozipc" a TemplateProject.zip *.* -r
move/y TemplateProject.zip ..\Template.Vsix\ProjectTemplates
注释: 在build项目的时候,执行批处理文件,将项目目录作为参数%1传入到bat文件
bat line 1: 进入项目目录,方便line2的压缩命令压缩本目录及子目录文件,原因参考第5.点
bat line 2:压缩命令,使用有命令行的压缩软件,例如rar,haozip等.不过haozip很奇怪,我家里的机器是安装在program files,而公司的机器是program files(x86).但是两台机操作系统都是x64
bat line 3:上文是移动到vsix的目录所在位置(推荐,以便使用IWizard生成的dll),实际上可以移动到%Userprofile%\Documents\Visual Studio 2012\Templates\ProjectTemplates直接使用(无IWizard时)
关于IWizard
IWizard也是非常麻烦的东西,因为之前很少用需要注册到GAC带签名的项目,所以当时也走了不少冤枉路
1.需要引用EnvDTE 及 Microsoft.VisualStudio.TemplateWizardInterface
2.只要实现接口方法RunStarted即可,ShouldAddProjectItem方法返回true,其他方法全部留空
3.可以创建一个winform来输入参数,然后再RunStarted里面初始化这个winform,并ShowDialog();
4.参数replacementsDictionary,既可访问也可修改,这里可以添加新的替换变量,或者读取默认替换变量的值
5.项目需要"签名--为程序集签名",生成的key文件,必须带密码,否则无法添加到GAC
项目copy到其他机器使用时,编译的时候会提示证书文件相关的错误.此时只需在更改密码处重新输入一次密码
6.GAC注册看似简单,但还是有注意的地方.首先要使用管理员身份运行vs工具命令提示,然后命令参数需要注意
注册 gacutil /i 项目名.dll 卸载 gacutil /u 项目名 这里不能带dll 查看注册情况 gacutil /lr 项目名 这里不能带dll
7.在使用vsix项目的时候,可以省略第6点.
关于VSIX项目
想要不注册GAC,而且可以很炫的分发给别人,可以选择创建VSIX项目.
但是如果是小团队合作,我还是推荐注册GAC,然后在vs中设置模板目录为共享目录以访问vstemplate生成的zip文件
1.需要先下载visual studio 20XX SDK,安装后可创建VSIX PROJCT(扩展性栏目下)
2.可视化编辑source.extension.vsixmanifest,关键是在Asset栏目中新建对应的项
a.对于IWizard生成的DLL,注意要引用包含了IWizard的项目
Type: Microsoft.VisualStudio.Assembly
Embed in this folder填 "Assemblies"
b.对于vstemplate项目
Type:Microsoft.VisualStudio.ProjectTemplate
Source: 可选择File on System, 选择文件后,文件会自动copy到ProjectTemplates目录下.因此, "关于.vstemplate"第9点描述的批处理move位置,应该是该路径
如果选择 A project in current solution,请留意以下内容.
3. 选择 A project in current solution后,如果在编译时出现提示 "该项目中不存在目标“TemplateProjectOutputGroup”, 那么想必你的project是从菜单栏导出的模板改出来的,如果是"新建--扩展性--C# Template project",是不会出现这个错误提示的.
这个问题在google,baidu能搜到有人提问,但是没有确切解决问题的办法. 最终我在仔细对比两套csprj文件后,发现需要添加以下两项
a.在<PropertyGroup>...</PropertyGroup>中添加下项
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
b.找到<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />在下面添加
<Import Project="$(VSToolsPath)\VSSDK\Microsoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />
且a要先于b.
4.安装VSIX后,若果在新建项目中还没看到,请关闭所有vs IDE,重启后方可显示.
更新同样需要先卸载--再安装--再重启.
这也是为什么在小团队中推荐使用设置模板目录为共享目录的原因.否则实在是太麻烦了
vstemplate关键点纪要的更多相关文章
- 创建Visual studio项目模板 vstemplate关键点纪要
from:http://www.cnblogs.com/stickman/p/3454719.html 经过多次的实验,终于完美生成一个.VSIX的项目模板安装包,其中遇到不少问题与挫折,久经goog ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- 微信小程序首次官方分享的纪要
先交代备注: 这次有关小程序的分享只有技术的 QA环节,其他如产品.入口.流量.与公众号的整合等等,回答都是暂时无法给出答案或不确定: 小程序最终发布时间官方也还未确定,不过说应该就是近期: 小程序的 ...
- 新编码神器Atom使用纪要
Atom是 Github 专门为程序员推出的一个跨平台文本编辑器.她很大程度上继承了SublimeText的美,而又不仅如此.有费了蛮大力气总结了一篇关于SublimeText文章: 如何优雅地使用S ...
- Atom使用纪要
一直在更新的原文地址奉上,欢迎PR:Atom使用纪要 官网地址: atom.io 目前(2015/7/29)Atom主题已有725个:Package已有2394 简单交代背景 Atom 是 Githu ...
- php大力力:技术排错过程中,关键点总结和心情历程(2015-10-19)
9:40 2015/10/19技术排错过程中,关键点总结和心情历程 有一个按照标题进行内容分类的函数似乎不起作用,这叫人沮丧. 在页面显示图片地址时候,在源系统和目标系统中,包含图片地址的页面代码格式 ...
- [CC]Plugin-提取ISS3D关键点
基于CloudCompare开发的提取ISS3D关键点. void qLxPluginPCL::doISS3D() { assert(m_app); if (!m_app) return; const ...
- 转:浅谈CSS在前端优化中一些值得注意的关键点
前端优化工作中要考虑的元素多种多样,而合理地使用CSS脚本可以在很大程度上优化页面的加载性能,以下我们就来浅谈CSS在前端优化中一些值得注意的关键点: 当谈到Web的“高性能”时,很多人想到的是页面加 ...
- [原创]java WEB学习笔记83:Hibernate学习之路---双向 1-n介绍,关键点解释,代码实现,set属性介绍(inverse,cascade ,order-by )
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- CSS+DIV+JQuery实际的视频汇总
在牛腩中学习过CSS和DIV.在JS中学习过CSS+JS 封装,在这里又回想了一遍,也作为查漏补缺,也算比較系统的复习了一遍吧. css核心内容主要包含四个方面:标准流.盒子模型,浮动和定位,而在B/ ...
- VisualStudio 自动排版等 快捷键
VisualStudio2010自动排版快捷键:全部代码排版:1. ctrl+E,D 按住ctrl,相继按下E.D 2. ctrl+K,F 按住ctr ...
- javascript之Style物
Background 属性 属性 描写叙述 background 在一行中设置全部的背景属性 ...
- android登录界面
在网上在到一个登录界面感觉挺不错的,给大家分享一下~先看效果图: 这个Demo除了按钮.小猫和Logo是图片素材之外,其余的UI都是通过代码实现的. 一.背景 背景蓝色渐变,是通过一个xml文件来设置 ...
- Linux开发环境的搭建和使用——Linux本必备软件SSH
SSH 至 Secure Shell 缩写.由 IETF 网络工作组(Network Working Group)开发:SSH 以建立应用层和传输层安全协议中的基础上. SSH 是眼下较可靠,专为远程 ...
- checkbox属性checked="checked"但状态不是勾选状态的解决办法
原因: jQuery API明确说明,1.6+的jQuery要用prop,不能用attr否则无效,尤其是checkBox的checked的属性的判断.
- Linux学习笔记——怎样在交叉编译时使用共享库
0.前言 在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这样的情况下便会产生下面疑问,比如: [1]交叉编译时的共享库是否须要放置于目标板中,假设须要放置在哪个文件 ...
- 【视频】零基础学Android开发:蓝牙聊天室APP(二)
零基础学Android开发:蓝牙聊天室APP第二讲 2.1 课程内容应用场景 2.2 Android UI设计 2.3 组件布局:LinearLayout和RelativeLayout 2.4 Tex ...
- 发现新大陆:一个最简单的破解SSL加密网络数据包的方法
1. 简介 相信能访问到这篇文章的同行基本上都会用过流行的网络抓包工具WireShark,用它来抓取相应的网络数据包来进行问题分析或者其他你懂的之类的事情. 一般来说,我们用WireShark来抓取包 ...
- Android Material Design带UI变化
谷歌Matias Duarte称,"Material Design是漂亮和大胆的.由于干净的排版和布局简单且easy理解.内容才是焦点. 谷歌I/O 014开发人员大会上宣布全新的设计语言& ...