visual studio 插件开发
插件的定义
所谓插件,就是根据平台接口开发的第三方程序。第一次听到这个名词很是不了解,听了解释也不是很明白,那我们来举个例子,比如说一辆房车,现在里面只有基本的一些设施,但是你现在想在顶部有一个晒太阳的躺椅,ok,这个功能需求你自己清楚的,那要怎么实现?是不是买个躺椅来就可以了?是的,只要买个躺椅。如果仅仅买个躺椅你是不是就能安装到房车顶部?那肯定不行吧,你得看看房车顶上有没有螺丝柱给你安装吧。可以看到,这个螺丝柱就是房车提供给用户的接口,你的躺椅就是插件实现的功能,而将躺椅安装到螺丝柱上,对于不同的房车肯定是有不同的方法的。所以插件是独立开发的,但是他要依赖一个平台,vs中的插件也是这么回事,vs这个平台提供了一些接口,比如你想开发编辑器相关的插件,有DTE接口,这些接口可以让你访问到vs的其他插件或者功能,你开发插件也必须安装到vs上才能正常工作。
vs中的插件类型
我最开始学习的时候搜索插件,发现很迷糊,因为vs支持的插件类型实在是有点多,所以每搜索一个,都感觉不太相同。
有很多方法去扩展Visual Studio(甚至是Team Foundation Server),VS扩展是对这些方法的一个统称。如果只有一种方式扩展它,Visual Studio就不会是一个伟大的微软式产品。对于编程方面来说,VS扩展的主要方式是通过宏、Add-ins和Visual Studio扩展包(Package)。
在vs中主流的插件开发方式有三种。
宏
我们对Office产品中的宏已经很熟悉了,和在Office里面一样,我们也可以通过宏来扩展Visual Studio 2008。这是扩展VS的最简单的方式——我们甚至不需要VS SDK。Visual Studio提供了功能允许我们去录制宏,宏可以访问的Visual Studio 2008的对象模型,并且可以很容易和和VS的命令融合,并提供非常有用的、自动化的属性值。
要成为一个非常专业的VS宏开发人员,你需要知道在宏后面的对象模型以及一些使用他们的方法。Visual studio 提供了一些例子。最好的办法是自己录制一些宏然后查看其中的代码,你可以通过这些代码来增加你的对宏的掌握。
尽管宏对于任务自动化非常棒,但是它并不能用于创建全新的功能。简单来说,宏利用了VS IDE的自动化接口,但是它并没有真正和和VS集成。当用宏开发的时候,你必须认识到任何人都可以通过宏来查看你的源代码。Visual studio Add-ins
Add-ins具有更加强大的功能来扩展visual studio,因为它可以访问Visual studio 2008的所有对象模型并添加新的UI元素,例如工具窗口、选项页、菜单以及工具栏命令等等,这些添加的功能看起来就行IDE的一部分。Add-ins还可以访问由IDE自己以及其他的Add-in提供的service。
品牌也被得到保证,因为插件信息会在Visual studio启动时显示的界面里或者“关于”对话框中显示。如果你用宏来扩展VS,宏那么所有人都可以看到你的源代码,但是一个Add-in是编译了的程序集,所以你可以像其他.NET 程序集一样,使用一些保护技术来保护你的代码。
要发布插件,你只需要简单的创建一个安装项目并编译出.msi文件就可以了。msi程序会做你的Add-in需要的所有的安装和注册任务,安装后你就可以立即使用插件了。 对于一些简单的功能来所,插件是最简单的开始方式。但在这个系列中,我并不会关注如何开发Add-ins,不过Add-in中那些用于VS Package的技术,尤其是如何使用VS IDE提供的对象模型,是非常有用的。Visual Studio Package
毫无疑问VS扩展包是扩展Visual studio最强大的工具。最直接的证据就是整个visual studio的功能就是建立在以Visual studio外壳(shell)为核心的扩展包上的。所有的Language、编辑器、调试器、Project System以及其他很多的组件都是Package。 从开发人员的角度来看,添加新的VS Package与微软添加VS IDE的核心功能是一样的。VS IDE并不会区别对待微软开发的Package和第三方开发的Package。 Package可以用你最喜爱的语言(c#, VB.NET, C++)开发,所以从知识产权保护的角度来讲他们可以像其他的.NET library一样的安全。 VS SDK提供了Package安装以及注册工具,regpkg.exe。 Visual Studio通过所谓的PLK(Package load key)来检查一个扩展包是否合法,这个PLK可以从微软站点上获取到,它是你的package的数字散列码。如果你的package部署到了产品环境下,它的PLK会被检查。(译者注:在开发与调试下不需要PLK)
注:对于vs插件类型的解释引用了这位博主的内容,大家也可以结合多方资料,来帮助学习。 明年我18
如何选择插件类型
上文已经说过了,vspackage无疑是最好的插件方式,原因有几点,对于宏和add-in ,vs已经逐步的抛弃了他们,这和vs平台的架构是有关系的,vs其实只是一个平台,或者可以说是vspackage的一个集合,它管理着这些package,很多vs自带的功能也是用vspackage来开发的,所以用vspackage来开发插件,从根本上来说和vs原生的功能是没有区别的,我们这个方式来开发,保证了通用性,不会随着版本的迁移导致插件被废弃
原文链接:http://www.jianshu.com/p/894fb6a4e8e4
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
visual studio 插件开发的更多相关文章
- visual studio插件开发-Menu
工欲善其事,必先利其器,作为程序员我们很大部分时间在和ide打交道,好的插件可以大大提高我们的编程效率,我开发过几个vs插件来解决一键生成dbmodels,快速部署到服务器,总结下来最关键的还是对于M ...
- Visual Studio插件开发基础
Visual Studio插件主要有两种:Add-in 和 VSX(Visual Studio eXtensibility) 两者区别可参考这篇文章:Visual Studio Extensions ...
- Visual Studio 插件开发资源
微软官方MSDN 官方MSDN永远是最大而全的电子字典Visual Studio Software Development Kit ,不过它的资料虽然详细,但没有一定的基础的话直接使用它的话有点无从入 ...
- visual studio插件开发dll类库免加全局缓存处理办法
1.卸载VSIXProject 2.然后编辑*.csproj 修改如下: 3.重新加载项目 编辑source.extension.vsixmanifest 添加资产: 完事后,直接安装VISX就可以了
- 【小试插件开发】给Visual Studio装上自己定制的功能来提高代码调试效率
背后的故事 随着项目需求的逐步增加,后端开发框架在我手上也慢慢重构为组件开发模式,整体结构类似于NopCommence.在这种结构中,每个组件所在的类库项目其实是生成到网站项目里指定的一个目录的,然后 ...
- Visual Studio Package 插件开发
背景 这段时间公司新做了一个支付系统,里面有N个后台服务,每次有更新修改,拷贝打包发布包"不亦乐乎"...于是我想要不要自己定制个打包插件. 部分朋友可能会认为,有现成的可以去找一 ...
- SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍
原文:SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍 由于开发SSMS2008插件是通过VS2008进行的,有必要先介绍一下VS2008的插件开 ...
- Visual Studio Package 插件开发之自动生成实体工具
前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...
- Visual Studio Package 插件开发之自动生成实体工具(Visual Studio SDK)
前言 这一篇是VS插件基于Visual Studio SDK扩展开发的,可能有些朋友看到[生成实体]心里可能会暗想,T4模板都可以做了.动软不是已经做了么.不就是读库保存文件到指定路径么…… 我希望做 ...
随机推荐
- implement "slam_karto" package on a Freight robot
1. login ssh fetch@<robot ip or robot name> 2. set robot master modify .bashrc in robot's com ...
- CI实践_Android持续集成
之前已经实现了Android的持续集成,并在项目中应用了一段时间.恰逢现在有几分钟时间,把之前的一些零散的点滴记录和整理一下,供有需要的朋友参考,或后续复用. 需要的准备知识:gitlab.Jenki ...
- FLASH CC 2015 CANVAS 中 createjs 移除绑定事件
myBtn.addEventListener("click", function(evt) { // do stuff... evt.remove(); // removes th ...
- iOS - UIProgressView
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIProgressView : UIView <NSCoding> @available(iOS 2. ...
- mysql 占用的内存大小
1.mysql执行查询计划,key_len表示索引使用的字节数,这个字节数和三个条件有关.mysql> create table t1(v1 char(10));Query OK, 0 rows ...
- 简单RTOS学习(一) uc/os-II 工程模板建立
随着工业需求以及单片机性能越来越高,单个芯片能够且需要处理的任务也越来越多,使用传统前后台任务模式已经很难满足设计的需求,嵌入式实时操作系统正是在这种背景下发展起来,目前流行的有rt-thread,f ...
- JAVA学习提高之----安装多个JDK版本的问题
我的机器上最开始安装的是jdk1.6,后来因为工作需要又安装了jdk1.4.但是,环境变量我并未更改,还是指向jdk1.6的路径的.可是,在cmd窗口输入 Java -version 却得到是1.4. ...
- hibernate的注解属性mappedBy详解
mappedBy: 1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性: 2>mappedBy标签一定是定义在被拥 ...
- Node 写文件
在程序开发过程中会遇到很多自己认为是对的但实际运行出来并不是自己想的那样的,这个时候就可以把程序运行的比较关键点用文件的方式存储下来,然后分析 node 方式 var fs = require('fs ...
- 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)
堆有最大堆和最小堆之分,最大堆就是每个节点的值都>=其左右孩子(如果有的话)值的完全二叉树.最小堆便是每个节点的值都<=其左右孩子值的完全二叉树. 设有n个元素的序列{k1,k2,..., ...