创建Visual studio项目模板 vstemplate关键点纪要

from:http://www.cnblogs.com/stickman/p/3454719.html

经过多次的实验,终于完美生成一个.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,重启后方可显示.

更新同样需要先卸载--再安装--再重启.

这也是为什么在小团队中推荐使用设置模板目录为共享目录的原因.否则实在是太麻烦了

时间: 2024-08-02 19:08:59

创建Visual studio项目模板 vstemplate关键点纪要的相关文章

Visual Studio 项目模板制作(一)

我们编写项目的时候,很多时候都是在写重复代码,比如一个比较完整的框架,然后下面有很多代码都是重复的Copy,其实我们可以利用Visual Studio的模板替我们干这些活,我们只要关注项目具体的业务就可以了: 下面我们开始: 1.模板类别 项目模板.项模板 其中,项目模板是创建项目用的,项模板是创建项用的 项目模板: 项模板: 下面我们创建项目模板 首先,将要制作成模板的项目打开,选中项目,点击文件->导出项目模板,弹出导出模板向导 然后填写相关信息,点击完成,这样就导出模板成功了 现在,很关键

Visual Studio 项目模板制作(三)

前面,我们已经制作好了模板,然后放到相应的Template目录就可以在Visual Studio中使用 本篇,我们采用安装VSIX扩展的方式来安装模板,这种方式需要安装Visual Studio SDK 安装了SDK之后,可以在新建项目里面看到VSIX Project 选择VSIX Project 然后设置一下名称,点击确定,项目就新建完成了 项目结构: 现在我们开始 首先,双击打开source.extension.vsixmanifest 设置扩展的各种属性 然后,添加我们前面两篇制作的模板

Visual Studio 项目模板制作(四)

上一篇,介绍了VSIX安装模板的方法,那么,你是不是要问,为何有些项目模板却可以有向导,那是怎么做到的 今天这篇文章就是介绍如何为自己的模板添加向导,向导可以引导你完成项目中各种参数的设置,比如项目创建人,项目描述,公司等 下图创建Web项目时的向导 下面我们开始制作我们自己的项目向导 需要用到的两个类库: envdte , Microsoft.VisualStudio.TemplateWizardInterface 创建一个类库项目,引用上面两个类库 添加一个类,取名ProjectWizard

Visual Studio 项目模板制作(二)

上一篇,我们制作了项目模板,本篇我制作项模板 首先,从我们需要导出模板的项目中,文件->导出模板,弹出 导出模板向导 对话框 选择项模板,点击下一步 选择要导出的项,点击下一步 选择要Reference的类库 修改模板名称,点击完成 然后,解压生成的zip文件,如图 打开.vstemplate文件 <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate

使用GitHub For Windows部署Visual Studio项目

因为最近同时再看很多技术方面的书,书上的例子有很多自己想亲自尝试一下,但是每次写例子都得创建一个新项目未免太麻烦,索性就整理一个合集,然后发布到GitHub上. 首先使用GitHub For Windows,点击左上角的[+]号,默认的选项就是[Create],选择一个目录,并且将项目名称填入[Name]文本框,如图所示 这样Git项目创建好之后,选择右上角的[Publish Repository],可以写上项目的说明[Description],然后就可以点击下面的[Publish]按钮发布到G

如何创建 Visual Studio 2017 RC 离线安装包

友情提示 目前,Android SDK 不支持离线安装.所以在未联网的电脑上离线安装 VS2017RC 且选择了 Android SDK 则可能失败. 创建 Visual Studio 的离线安装计划 首先下载相应版本的可执行文件,例如:vs_community.exe.vs_enterprise.exe 或 vs_professional 在 cmd 中运行可执行文件并加入下列参数: a. --layout <path>,<path>参数用于指定下载文件的目标路径.不支持相对路径

[Cordova] 无法编译Visual Studio项目里Plugin副本的Native Code

[Cordova] 无法编译Visual Studio项目里Plugin副本的Native Code 问题情景 开发Cordova Plugin的时候,开发的流程应该是: 建立Cordova Plugin 发布到本机文件系统或是Git服务器 使用Visual Studio挂载Plugin 编译并执行项目 在这个开发的过程中,如果在编译并执行项目的这个步骤,发现Plugin的Native Code需要修正.直觉的想法,会是直接修改Cordova项目里Plugin副本的Native Code之后,再

visual studio 项目工程中相对目录

最近从TFS拿到一个很久没有人维护的项目,老是提示dll找不到. 弱弱地研究了一下,原来是相对路径惹的祸. 1. C#中相对路径的表示:. 表示当前目录,..表示上一级目录 2. 工程中的引用 <Reference Include="XXXX.Data"> <HintPath>..\..\..\..\..\..\..\Common\XX\XX\XX\v1.1.0.1105\XXXX.Data.dll</HintPath> </Reference

visual studio 项目中使用EF创建的数据库,后续更新数据库操作(生产已经部署,不能删除数据库重新创建)

情景:SharePoint项目(其他类型的项目道理也一样),数据库是用EF(版本:6.0.0.0)创建的,生产环境已经使用,所以后续修改数据库,只能通过更新来实现. 下面是具体的操作方式: 1.visual studio 打开项目,打开“程序包管理控制台”. 操作方式:视图--其他窗口--程序包管理控制台 2.项目“引用”中 EntityFramework.SqlServer.dll 和 EntityFramework.dll 这两个文件的属性要复制到本地 操作方式:选中文件--按F4--属性对