(译者注:这个系列是翻译inovak在DiveDeeper上的LearnVSXNow系列博文,该系列的目录可以在这里找到,也可以点击这里直接访问DiveDeeper博客)
我是一个Visual Studio的爱好者。有很多次,我都很想创建一些VS的插件来帮助我完成一些开发工作。我也一直在尝试劝说我的同事们把他们常用的功能做成VS插件。但是,当他们问我如何入手的时候,我总是建议他们去看微软的SDK以及相关的文档。但我的同事们常见的问题是:
- · 我没有时间去看那些上百页的文档。
- · 我不了解COM,而且也不想碰那东西;我想要我的.NET类。
- · 我看了开始的50页,但是仍然不知道如何能够快速开始创建一个插件。
- · 我看了SDK里面的例子,但是它看起来创建我自己的Package很难。
我并不认为这是他们的态度问题。他们能够学习.NET、WinForms、asp.net、WCF等等等等。据我所知,他们都有足够的能力学习VSX(VS SDK).但是他们告诉我,那东西学起来既困难且耗费时间。
作为MVP,我决定改变这个关于VS SDK和VS Package的世界。我也属于那类非常喜欢.NET开发和VS、但是对VS SDK不自信的人。我决定首先学习一下有关Visual Studio扩展的知识,然后公布我自己的学习方法。我的目标是给像我一样学习VS扩展的人一个出发点,并揭开它的神秘面纱。这里所介绍的所有内容都是针对VSX新手,所以这个系列就叫他“LearnVSXNow”.
首先要做的
要利用VS SDK进行开发,你需要安装Visual Studio 2008以及Visual Studio 2008 SDK。作为MSDN订阅者,你可以下载并安装Visual Studio 2008专业版(或者你可以从别的渠道获得它)。你可以访问Visual Studio 扩展开发者中心(http://msdn.com/vsx)下载Visual Studio 2008 SDK.
如何进行VS IDE扩展?
有很多方法去扩展Visual Studio(甚至是Team Foundation Server),VS扩展是对这些方法的一个统称。如果只有一种方式扩展它,Visual Studio就不会是一个伟大的微软式产品。对于编程方面来说,VS扩展的主要方式是通过宏、Add-ins和Visual Studio扩展包(Package)。
宏
我们对Office产品中的宏已经很熟悉了,和在Office里面一样,我们也可以通过宏来扩展Visual Studio 2008。这是扩展VS的最简单的方式——我们甚至不需要VS SDK。Visual Studio提供了功能允许我们去录制宏,宏可以访问的Visual Studio 2008的对象模型,并且可以很容易和和VS的命令融合,并提供非常有用的、自动化的属性值。
要成为一个非常专业的VS宏开发人员,你需要知道在宏后面的对象模型以及一些使用他们的方法。Visual studio 提供了一些例子。最好的办法是自己录制一些宏然后查看其中的代码,你可以通过这些代码来增加你的对宏的掌握。
尽管宏对于任务自动化非常棒,但是它并不能用于创建全新的功能。简单来说,宏利用了VS IDE的自动化接口,但是它并没有真正和和VS集成。当用宏开发的时候,你必须认识到任何人都可以通过宏来查看你的源代码。
在LearnVSXNow系列中,我不打算涉及到宏的开发。
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 Package的开发。
如何开始
比较三种不同的扩展方式,毫无疑问宏只是挠挠痒。Add-in和Package允许开发者对IDE进行深度的定制。所以,在这个系列中,我主要针对vs Package的开发。
微软说,“要成功的开发VsPackage你必须学习interop程序集”。这是一个非常怪异的说法,会花费我们大量的时间。我不想说你必须学习interop程序集,我宁愿说你必须理解VS Package背后的基本概念。所以请和我一起探险:让我们破解开发VS扩展包之谜!别忘了,在这个领域我也是一个新手,只是比你早开始了几步而已!这个一个真正的探险:我不能提前画出整个轮廓,只知道仅有的下面几步。当我们达到一个里程碑,我们停下来,进行总结,然后设置下一个里程碑。
现在,我们的第一个里程碑是理解什么是Vs Package,它怎么工作,它包含了那些元素。我们将从实践中开始:建立一些简单的扩展包,然后看看里面都有什么。
在下一篇我们将一起创建一个“hello world”级别的VS Package。
原文链接:http://dotneteers.net/blogs/divedeeper/archive/2008/01/02/LearnVSXNowPart1.aspx
译文参考:http://www.cnblogs.com/walaqi/archive/2009/10/19/1585910.html