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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
上一篇:慕课python3.5学习笔记


下一篇:Java中Set集合的使用