zoukankan      html  css  js  c++  java
  • vstemplate关键点纪要

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

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

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

       

  • 相关阅读:
    【CodeForces】[366A]Dima and Guards
    Linux将程序前台转后台执行
    Storm在Mesos上跑与不在的运行命令区别
    去掉SSH KEY密码
    git 退回到倒数第二次提交
    浅析UGC、PGC和OGC
    linux主机名与IP地址配置文件
    wget ERROR 404: Not Found.
    cpuacct (CPU Accounting Controller)
    Ansible的安装与使用
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3463406.html
Copyright © 2011-2022 走看看