由于是公司的项目,也不可能直接拿过来写博客,所以准备搭建一个自己的VSX项目。 项目需求这里就不写了,大体可参考曾经的一篇文章,这个VSX项目就是用来简化插件式开发。 本文开始正式记录做这个VSX项目的关键点,如果读者没有接触过VSX开发,请参考LearnVSXNow!,这里有译文

项目结构


项目使用模块化开发,将多个VSPackage打包成VSIX项目,可随意删减增加模块。提出一个公共的项目,用来简化VSX开发,分离SDK相关对象。 项目结构大概如下:

每个模块都是相对独立的功能,公共部分在Frramework工程中,以简化VSX开发,最后使用VSIX项目进行组装。大体结构就是这样。

VSIX


安装VS2010SDK后,在新建项目中就能看到Extensibility类别,其中包括如下几个项目模板:

首先创建一个VSIX项目。VSIX相当于Java中的Jar包,实际上VSIX也可以和Jar包一样,使用各类压缩解压缩软件打开。 新建的VSIX项目中,只有一个source.extension.vsixmanifest文件,在VS2010中直接双击该文件,会使用设计器打开(我们自己也能做这种设计器,后面可能会介绍)。

这里第一感觉就是安装程序的一些信息,一些产品名称,作者,版权之类的东西,比较重要的是下面的两个列表框:References和Content。 先不管这两个都有什么用处,直接点F5运行该项目,发现又启动了一个VS,在标题栏中可以看到后面有实验实例的字样,依次选择:工具-扩展管理器,可以看到咱们新建的VSIX项目,右边可看到一些在vsixmanifest文件中填入的信息。

查看刚刚新建的VSIX项目的属性发现,在调试中,启动操作项选择了启动外部程序,并且里面是当前VS的程序路径,命令行参数中为/rootsuffix Exp,所以在点击F5调试时会启动一个实验实例。 需要注意的是有时候直接启动可能不会即使更新修改的VSX,暂时还没弄明白是什么原因造成的,有时候调试比较麻烦。

一些问题


上面提到了vsixmanifest中的Content,上图中可以看到我将其他VSPackage、Template或ToolBox加入了Content中,根据不同的项目我们把需要的模块添加到Content中,比如这里我没有添加WPF ToolBox的模块。 在上面实验实例的扩展管理器中,出现了很多个扩展,而这些扩展都是各个模块,不应该出现再扩展管理器中。我们想要的效果是只在扩展管理器中出现一个扩展,就是我们的VSIX项目。 为了解决这个问题,我尝试了每个模块的一些属性,发现在每个模块项目属性中,出现有如下选项:

默认是勾选了前两项的,这里如果不想让其出现在扩展管理器中,只要取消勾选前两项即可。

项目中的Framework项目是用来简化VSX开发的,所以需要引用一些VSX开发使用到的dll,我懒得一个一个去引用,直接新建了一个VSPackage项目,因为只是提供公共方法,并不需要在这里做扩展,所以删除了项目中的所有文件,但是在编译的时候发现总是报错。查了查才知道必须修改一下项目文件才行。 先卸载该项目,然后点击右键,选择编辑项目文件,删除最后一个Import标签,也就是这一行:

  1. <ImportProject="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets"/>

之后重新加载,则没有问题。但是如果需要其他项目引用,还需要给该项目强签名,这个很多人都知道,这里就不多说了。

至此整个项目结构就算基本搭建完成。

VSX-2 搭建项目的更多相关文章

  1. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  2. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

  3. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  4. ASP.NET MVC搭建项目后台UI框架—3、面板折叠和展开

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  6. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. ASP.NET MVC搭建项目后台UI框架—7、统计报表

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

  9. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  10. ASP.NET MVC搭建项目后台UI框架—9、服务器端排序

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

随机推荐

  1. 02、体验Spark shell下RDD编程

    02.体验Spark shell下RDD编程 1.Spark RDD介绍 RDD是Resilient Distributed Dataset,中文翻译是弹性分布式数据集.该类是Spark是核心类成员之 ...

  2. Firefox浏览器 页面滑动卡帧问题

    在设置里关闭"平滑滚动"选项即可,猎豹似乎没有,遭黑

  3. 一款带有CSS的单选框以及选中事件

    html <div class="radio radio-success"> <input type=" name="radioSingle1 ...

  4. 是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样)

     是否应该提供一个dao.insertIgnoreNull ? (像updateIgnoreNull一样)  发布于 406天前  作者 SayingCode  153 次浏览  复制  上一个帖子  ...

  5. firewalld 使用简介

    学习apache安装的时候需要打开80端口,由于centos 7版本以后默认使用firewalld后,网上关于iptables的设置方法已经不管用了,想着反正iptable也不会用,索性直接搬官方文档 ...

  6. Poj(2421),Prim最小生成树

    题目链接:http://poj.org/problem?id=2421 最小生成树的变形,有的村庄已经连接了,就直接把他们的权值赋为0,一样的做最小生成树,Prim算法. #include <s ...

  7. device not ready cuda

    问题描述: CUDA: 使用cudaEventElapsedTime时返回device not ready error 强调下我是用谷歌大神搜索到的结构哦! http://stackoverflow. ...

  8. CentOS 7与 Windows双系统丢失Windows启动项及默认启动项修改

    1.Windows启动项消失的原因:   在安装Win7.8/10系统+CentOS7双系统后,默认会将mbr(Main Boot Record)改写为grub2,默认的CentOS7无法识别Wind ...

  9. ThinkPHP 更新数据 save方法

    ThinkPHP save() 方法 ThinkPHP 中使用 save() 方法来更新数据库,并且也支持连贯操作的使用. 例子: public function update(){ header(& ...

  10. Http之基础

    简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基于TCP/I ...