zoukankan      html  css  js  c++  java
  • 创建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%DocumentsVisual Studio 2012TemplatesMy Exported Templates\, 压缩项目文件为zip时,根目录必须包含.vstemplate,否则无法出现在VS 模板项目选择界面中

    6.zip后的模板项目文件,需要放  %Userprofile%DocumentsVisual Studio 2012TemplatesProjectTemplates 方可被VS识别.

    7. AssemblyInfo.cs文件也要挪出Properties目录,并在.vstemplate 修改如下

     <ProjectItem ReplaceParameters="true" TargetFileName="PropertiesAssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>

    8.vstemplate项目的.cs文件,由于被$变量替换$,正常生成会提示大量错误信息.因此需要将所有.cs的"文件属性--生成操作"设置为"无".   

       或者在sln解决方案文件中,"配置属性"中设置该项目为不生成(不推荐使用该方法)

    9.可以附加上一个.bat批处理文件.内容如下

    cd /d %1 "C:Program FilesHaoZiphaozipc" a TemplateProject.zip *.* -r move/y TemplateProject.zip ..Template.VsixProjectTemplates

     注释:  在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%DocumentsVisual Studio 2012TemplatesProjectTemplates直接使用(无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)MicrosoftVisualStudiov$(VisualStudioVersion)</VSToolsPath>

         b.找到<Import Project="$(MSBuildToolsPath)Microsoft.CSharp.targets" />在下面添加

          <Import Project="$(VSToolsPath)VSSDKMicrosoft.VsSDK.targets" Condition="'$(VSToolsPath)' != ''" />

          且a要先于b.   

     

      4.安装VSIX后,若果在新建项目中还没看到,请关闭所有vs IDE,重启后方可显示.

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

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

  • 相关阅读:
    Civil 3D 二次开发 创建Civil 3D 对象—— 01 —— 创建几何空间点
    Civil 3D 二次开发 创建Civil 3D 对象—— 00 ——
    Civil 3D 二次开发 创建AutoCAD对象—— 01 —— 创建直线
    Civil 3D 二次开发 新建CLR项目出现错误C2143
    Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
    了解AutoCAD对象层次结构 —— 6 ——块表记录
    datepicker97使用
    使用angular 外接 templateUrl,使用ng-include
    angularJs 遮罩
    网上找的有关css兼容问题
  • 原文地址:https://www.cnblogs.com/94cool/p/5693882.html
Copyright © 2011-2022 走看看