包的主要入口点在于Microsoft.VisualStudio.Shell.Package的子类中。它拥有多个与包的注册相关的属性,我们会在安装和注册的过程中使用它们。(图10)
图10 Package类
你可以在名为Initialize的重载函数中编写代码,从而在载入你的包时与Visual Studio交互。 在我们简单的包中,“Hello World”和“Hello World Tool Window”菜单都是在这个初始化函数中创建的 。
图11 Initialize函数
菜单的回调函数是MenuItemCallBack和ShowToolWindow。 当点击“Hello World”菜单的时候,就会触发MenuItemCallBack 函数。 默认的代码是要显示一个消息框。 它是你的包逻辑的起始点。 当点击“Hello World Tool Window”菜单的时候,就会触发ShowToolWindow 函数。 默认的代码是以标准的方式弹出工具窗口。
工具窗口是Visual Studio IDE的子窗口。 和工具箱、解决方案管理器和属性窗口一样,它可以停靠、浮动或者以标签的形式显示在文档框架中。 它们是动态的(或者说是自动可见的)。 有了Visual Studio 2010对多显示器的支持,工具窗口也可以脱离开来,并拖拽到第二台显示器中。 Visual Studio Package Project模板默认情况下会为工具窗口创建WPF的用户控件。
现在我们已经有了Visual Studio Package的骨架,可以构建他来生成可以分发的VSIX文件,我们或者可以通过复制的形式或者通过Visual Studio Gallery来分发它。
发布到Visual Studio Gallery
想要通过Visual Studio Gallery来发布扩展,只需要三步,就可以发布你的扩展,从而让全世界的开发者都能够访问到它。
· 选择你的扩展的类型
· 上传VSIX文件
· 添加附加的类别和描述。
Visual Studio Gallery会从VSIX中取得元数据,包括名称、ID、版本、公司、许可以及产品的图片。 扩展管理器会使用版本号来自动管理扩展的更新。
图12 Visual Studio Gallery
当你的扩展有新版本时,你所需要做的就是在VSIX的说明文件编辑器中更改版本号,构建新的VSIX文件并上传到Visual Studio Gallery中。 这样,更新就马上可以提供给用户下载了。 当用户启动Visual Studio新的实例时,Visual Studio就会在系统托盘显示新的更新通知。
有时这是很方便的,因为Visual Studio Gallery没有验证过程。 发布扩展就像在推特上发布一条消息一样简单。 对扩展开发者的一项提示是,你应该尽可能地测试以保证质量。 你不应该先上传扩展,然后才开始测试,因为它马上会被大家所发现。 VSIX支持双击安装,就像VSI和MSI一样。 如果其中有bug,那么就使用扩展管理器来卸载它,创建新构建的VSIX,然后双击它来安装并进行测试。 在开发过程中,你不需要提升版本号。 记着在完整地测试之后在把它上传到Visual Studio Gallery中。
这会带来另一种提示。 Visual Studio Gallery不支持私有分发。 如果你的扩展只在你的公司的开发者中使用,那么你就不应该把它上传到Visual Studio Gallery中。 相反,你应该在公司内部发布VSIX文件。 在这种情况下,想要更新扩展,你需要手动地与扩展用户沟通。
Visual Studio Gallery的目的之一就是要创建Visual Studio扩展的生态系统。 自从几年之前它可以用于Visual Studio 2008开始,人们已经上传了上千个扩展。 与其说是一种商业集市,不如说是一种社区分享站点,就像Apple的App Store和Windows Phone Marketplace一样。 如果开发者想要销售他们的扩展,那么就需要找到其它厂商和付费服务,就像旧式的共享软件发布一样。 用户无法通过扩展管理器付费。 结果是,扩展管理器和Visual Studio Gallery为开源和免费的扩展项目提供了优秀的支持。
总结
Visual Studio 2010的扩展管理器和Visual Studio Gallery提升了扩展用户和扩展开发者的用户体验。 你应该始终记着,那里有成千上万的扩展可供你扩充Visual Studio的特性。 还应该始终记着,你可以在Visual Studio中搜索和管理扩展的生命周期。 如果你对于扩展Visual Studio有什么好主意,那么我建议你试着创建一些Visual Studio扩展。 Visual Studio扩展会提升开发的生产力。