[VSX.001]深入VS SDK
本文为阅读Inside the Visual Studio SDK笔记。
扩展VS的方法很多,最常见的有三种:Automation,VSPackage extensions,Managed Extensibility Framework(MEF) extensions.
Automation:主要用来做一些可以被自动化的重复性任务,以宏(macros), 插件(add-in),向导(wizard).
VSPackage extension:VS有很多组件都是VSPackage,例如:调试器(debugger), 工具栏(predefined toolbar).VSPackage是扩展VS强有力的方法,它可以访问并且扩展VS的很多组件,例如:shell和项目系统(project system).
MEF(Managed Extensibility Framework) :MEF是一个扩展机制,可以在不创建VSPackage的情况下自定义和扩展编辑器(editor).[不解]
VS Extensibility Model (VS可扩展模型)
VS可扩展模型是由不同的库(library)组成的,以便让新的扩展访问VS的各个组件.
最基础的模型是VS API是一系列的接口(interface),微软的员工就是用它们开发出了VS.对于非托管代码,你可以用一个基于模板的VSL(VS Library) 来写扩展.
如果你选用托管代码,你可以用直接用VS interop assemblies(互操作程序集??),或者选用MPF(Managed Package Framework, 不同于上面的MEF哦) 提供的类,这些类封装了很多VS API的接口.
你如果需要扩展编辑器,你可以用编辑器程序集或者MEF程序集.[不解]
阅读更多:
VS服务(Services)
一个服务提供一系列接口.VS提供一系列服务可以被任何包括扩展在内的任何组件使用.例如:服务可以让工具窗口动态显示/隐藏,访问帮助,状态栏,UI事件.VS2010的编辑器提供的服务可以被编辑器的扩展导入.
阅读更多:
VS可扩展组件
常被扩展的组件有:
Shell命令(Commands)
菜单栏和工具栏
工具窗口(Tool Windows)
文档窗口(Document Windows)
编辑器(Editor)
语言服务(Language Service)
项目(Project)
模板(Template)
命令(Command)
命令是一些任务,例如:打印文档,重绘视图,创建新文件.
你可以创建并把这些命令注册到VS.你可以决定这些命令出现在VS的什么地方,例如:菜单或者工具栏.一般来讲,自定义的命令出现在"工具(Tools)"菜单,会显示工具窗口的命令一般出现在"View"的子菜单"Other Windows”里面.
必须给命令创建一个事件响应(Event handler).The event handler determines when the command is visible or enabled, lets you modify its text, and guarantees that the command responds appropriately when it is activated. In most instances, the IDE handles commands by using the IOleCommandTarget interface. Commands in Visual Studio are handled starting with the innermost command context, based on the local selection, and proceeding to the outermost context, based on the global selection. Commands added to the main menu are immediately available for scripting.
阅读更多:
How VSPackages Add User Interface Elements to the IDE.
菜单和工具栏
这段都是废话,说菜单可以调用命令,有主菜单,子菜单,和上下文菜单(右键菜单).
阅读更多:
这段又是废话,讲什么是工具栏的.
阅读更多:
工具窗口(Tool Windows)
工具窗口的例子:Toolbox, Solution Explorer,Properties窗口,Web Browser.
工具窗口提供了多种多样的可与用户交互控件.比如属性(Properties)窗口让用户可以设置对象的属性,并且可以用于不同的情景.输出(Output)窗口也类似.等等...
看下图列出了几个VS的工具窗口:
不同的窗口可以停靠(Dock)在一个面板(Pane)上.
上图的主文档窗口显示了几个编辑器窗口停靠在一个面板上.
当你创建并且正确注册了你的工具(或编辑器)窗口扩展,他们自动拥有了和原有工具窗口一样的停靠等特性.
阅读更多:
文档窗口(Document Windows)
文档窗口的概念是MDI(Multiple-document interface)的窗口,例如:文档编辑器,设计器(Designer)等...
文档窗口一般会与文件的类型关联起来,例如:HTML,C++文件等..
阅读更多:
编辑器
编辑器是VS2010的新组件.编辑器本身是一个VSPackage,你可以通过MEF来扩展它,大部分情况下不用创建新的VSPackage.当你想使用比如菜单命令或者快捷键的时候,你可以创建一个带MEF的VSPackage.
在你想有一个自定义的设计器之类组件时,你可以创建一个编辑器.
阅读更多:
语言服务(Language Service)
需要支持新的编程语言时,需要创建一个语言服务. 语言服务提供诸如:语法高亮,智能提示等编辑器特性.
语言服务的核心是一个解释器(parser)和一个扫描器(scanner)或者称词法分析器(lexer).Scanner把源文件分成叫做tokens的元素,parser确定这些token的关系.
你可以创建托管和非托管的语言服务.
阅读更多:
-
Implementing a Language Service By Using the Managed Package Framework.
-
Walkthrough: Creating a Language Service (Managed Package Framework)
项目(Projects)
Project用来组织和build源代码和其他资源.可以通过用VSPackage提供Project 类型,Project子类型,自定义工具来扩展VS的项目系统.
Solution是一个或多个Projects.Solution存储在.sln文件里.
阅读更多:
项目和Item模板
模板包含了项目的结构和基本文件.
阅读更多:
Adding Project and Project Item Templates.
集成(Integrated)和独立(Isolated)应用程序.
一个集成到原有的VS里面,一个包含了独立的一个VS空壳.
阅读更多: