(首先声明这个系列是翻译的DiveDeeper博文,是我在学习VS扩展包的过程中的顺带做的,如果有不明确的地方,请直接访问原文或者给我发邮件)
我是一个Visual Studio的爱好者,一方面因为在我的日常工作中,Visual Studio是我最常用的开发工具。另一方面,Visual Studio是我用过的最好用的开发工具,尽管依旧有着一些恼人的莫名其妙的问题。有很多次,我都很想创建一些VS的插件,这样可以帮助我完成一些体力劳动或者让我现在的生活好过一点,提到VS里面让我感到不爽的功能。我也一直在尝试劝说我的同事们可以试着实现一些他们的插件。但是,当他们问我如何开始的时候,我总是建议他们去看微软的SDK以及他们的文档(这也许是一个糟糕的主意,原因地球人都知道)。我的同时常见的问题一般是:
· 我没有时间去看那些上百页的文档(关键是没有一个组织好的阅读路径)。
· 我不了解COM,而且也不想碰那玩意儿;我想要我的.NET类。
· 我阅读了开始的50页,但是依旧不知道如何能够快速开始创建一个插件。
· 我看了SDK里面的例子,但是它看起来有点儿困难。
我不认为我的同事能力不行。他们能够学习.NET(原来搞JAVA),WinForms(原来做asp.net),asp.net(原来做IBM的MainFrame绿屏)以及WCF(原来不知道什么叫做Web Service^_^).据我所知,他们都有足够的能力学习VSX(VS SDK).但是他们告诉我,那东西学起来既困难且耗费时间。
我决定改变这个有关VS SDK和VS扩展包(Visual Studio的插件)的世界,顺便成为MVP(因为我们公司一个MVP每天特吊的在我面前晃来晃去)。我也属于那类对.NET变成以及VS感觉非常亲切,但是对VS SDK感觉不自信的人。我决定首先学习一下有关Visual Studio扩展的知识,然后按照我自己的方式对相关的概念组织一下,希望能够让这件事情变得容易一点。我的目标是给像我一样学习VS扩展的人一个出发点,并揭开它的神秘面纱。这里所介绍的所有内容都是针对VSX新手,所以这个系列就叫他“LearnVSXNow”.
首先要做的
要练习VS SDK的开发,你需要首先安装Visual Studio 2008以及Visual Studio 2008 SDK,这些你都可以通过MSDN以及互联网下载到试用版本已经正式版本(如果你有相应的许可证)。你可以访问Visual Studio 扩展开发者中心(http://msdn.com/vsx)下载Visual Studio 2008 SDK.
Visual Studio IDE提供的扩展方式
Visual studio扩展包是一个对VS插件的统称。实际上,VS的扩展可以有很多中方式:
1. 宏。
这个跟在Office里面一样,你可以通过VB scripit编写脚本或者直接通过IDE提供的功能进行录制。要成为一个职业的VS宏开发人员,你需要知道在宏后面的对象模型以及一些使用他们的方法。Visual studio 提供了一些例子。最好的办法是自己录制一些宏然后查看其中的代码。
尽管宏非常棒但是他们有时候也不是那么管用。他们不能为VS提供新的功能,例如新的菜单,新的工具栏以及类似WinForms那样的设计器。而且宏也不能保护你的劳动成果因为任何人都可以通过宏来查看你的源代码。
2. Visual studio 插件。
插件具有更加强大的功能来扩展visual studio,因为可以访问Visual studio 2008的所有对象模型并添加新的UI元素,列入工具栏/向导/菜单以及工具窗口,类似属性窗口之类。这些添加的功能看起来就行IDE的一部分。插件还可以访问有IDE自己以及其他的插件提供的Service。
品牌也被得到尊重因为插件信息会在Visual studio的“关于”窗口中显示,看起来更正式。如果手工的写了一个宏那么所有人都可以看到你的源代码。但是一个插件是编译了的二进制程序集(.NET Assembly),所以你可以使用一些知识产权保护技术来保护你的代码。
要发布插件,你只需要简单的创建一个Setup项目然后产生以及.msi文件就可以了,跟发布其他的产品是一样的。这个msi文件会做所有的设置以及注册服务,然后就可以立即开始使用插件了。
对于一些简单的目的来所,插件是最简单的开始方式。在这个系列中,我不会关注如何开发插件,但是那些用于VS扩展包的技术,尤其是如何使用VS IDE提供的对象模型,将会非常有用。
3. Visual Studio扩展包
毫无疑问VS扩展包是为Visual studio增加功能的最强大的工具。最明白的证据就是整个visual studio的功能就是建立在以Visual studio外壳(shell)为核心的扩展包上的(即智能客户端以及微内核模型)。
从开发人员的角度来看它实际上意味着添加VS的扩展包就像在开发VS IDE一样的。IDE对待微软开发的扩展包以及第三方开发的扩展包没有任何区别。
扩展包是由你最擅长的语言(c#, VB.NET, C++)开发的二进制文件爱你,所以从知识产权保护的角度来讲他们可以像其他的library一样的安全。
VS SDK提供了扩展包安装以及注册工具,regpkg.exe. visual studio通过PLK(Package load key)来检查一个扩展包是否合法,这个PLK可以从微软站点上获取到。在开发模式下,开发者不需要使用PLK因为调试是通过一个成为visual studio experimental hive的方式进行的,这种情况下,不进行PLK的验证。
这个系列主要是针对VS扩展包的开发。
4. 如何开始
比较三种不同的扩展方式,毫无疑问宏只是挠挠痒。插件和扩展包允许开发者对IDE进行深度的定制。所以,在这个系列中,我主要针对vs扩展包的开发。
微软说,“要成功的开发Vs扩展包你必须学习interop程序集”。这是一个非常奇怪的任务而且花费了大量的时间。我不想说你必须学习interop程序及,我宁愿所你必须理解扩展包背后的概念。所以让我们建立一个共同的期望:让我们破解开发VS扩展包之谜!别忘了,在这个领域我也是一个新手,只是比其他人早开始了几步而已。这个一个真正的期望:我不能提前画出整个轮廓。当我们达到一个里程碑,我们停下来,进行总结,然后设置下一个里程碑。
现在,我们的第一个里程碑是理解什么是Vs扩展包,它怎么工作,它包含了那些元素。我们即将建立一些简单的扩展包,然后看看里面都有什么。
在下一届我们将创建一个简单”hello world”扩展包