Extension+NVelocity
VS Extension+NVelocity系列(二)——让VS支持 NVelocity的智能提示(上)
一、基础概念
应该庆幸的是,VS的插件是靠着MEF实现而不是MAF,这让你所做的工作减轻了许多.如果在这之前,您已经了解了MEF的原理,我想对于VS插件的编写,您应该是很容易就能理解的.看看几个VS2010 SDK提供的例子,您就能熟练的编写了.
不过我还是简单的介绍一下MEF几个特点,目前来说,只要您了解这几个特点就足够了:
- 组合容器
- 部件
- 目录
- 使用特性导入、导出
这是一张博主 周金根 介绍MEF的图:

其中,CompositionContainer就是组合容器,Part就是部件,而VS插件的CompositionContainer需要一个“目录”(DirectoryCatalog)对象来发现这些部件.
Import和Export都属于特性,Import会将某个对象声明为一个导入,以便组合容器使用它所标记的对象找到”目录”内有Export标记了同样对象的对象.也就是MEF的定义之一:ExportAttribute 特性的类型必须与 ImportAttribute 相同。
更多关于MEF的情况,请关注本文的参考资料.
二、VS的插件原理
既然VS的插件是靠MEF实现的,那么当我们编写好一个插件,会有哪些东西被放入哪个目录才让VS找到他们呢?
如果你手头已然有了一个成品的或者三方的VS扩展包.也就是.vsix文件,将它复制一份,然后强行改名为.zip的文件.然后用Winrar打开它,您会发现以下内容:

extension.vsixmanifest文件会告诉VS它所依赖的.Net版本、引用的内容、dll、作者信息等内容。
抱歉[Content_Types].xml作用不解.
而其他内容就是我们编译我们的SDK项目所生成的东西.
那么这些内容会放到哪呢?
当你安装一个.vsix文件后,打开以下目录(Win7下默认路径):
C:\Users\Administrator\AppData\Local\Microsoft\VisualStudio\11.0\Extensions
这里面有命名正规的,像Microsoft这样的文件夹,还有像53w4yfez.zmc这样的文件夹

你需要关注的是第二种文件夹.都打开看一下,你会发现,总有一个文件夹和你打开的压缩包的文件基本一样:

VS插件的组合容器就是从这个目录来获取你的插件(部件)的.
有趣的发现
其实你会发现一件事情,微软的产品还是很喜欢.cab和.zip文件的.Office的InfoPath保存的.xsn文件也是如此.里面也是一堆文件.所以当你试图研究某个微软的产品的时候,不妨改成zip扩展名试试:)
三、创建“NVelocity编写插件”项目
安装完VS2012的SDK在创建项目的时候,你会发现多出来这么一些项目:

“NVelocity编写插件”是需要智能提示的,可惜的是,这里面并没有模板,理论上,选择VSIX Project是可以的,但是这个项目模板里面引用的类库实在太少了。方便起见,选择Editor Classifer项目即可,因为在后文,我们还要给NVelocity添加语法高亮的功能,Classifer正是我们需要的功能
关于其他条目的说明请参见:
http://www.codeproject.com/Articles/784998/Introduction-Visual-Studio-Editor-Margin-Extension
博主说他翻译的水平有限,就不坑大家了。。
四、小结
至此我们创建”NVelocity编写插件”的准备工作、基本概念就已经表述完了。本博主喜欢讲代码的时候专门讲代码,讲概念的时候专门讲概念。在下一章,我们将无废话的花费大篇幅的感受”NVelocity编写插件”的代码智能提示部分。本博主是师范出身,当初因为口才和有个程序猿梦的原因没有选择当老师,而且写博文才几篇,不懂太多,失误之处,望请海涵,讲的不对的地方。。。你特么的来打我呀!
五、参考资料
在 .NET 4 中使用托管可扩展性框架构建可组合的应用程序
Getting started with Visual Studio Editor Margin Extensions
Managed Extensibility Framework (MEF)
CodePlex,Microsoft.Composition Documentation
Extension+NVelocity的更多相关文章
- 让NVelocity做更多的事,VS Extension+NVelocity系列
我不知道园子里到底有多少人喜欢使用NVelocity这个模板引擎,其实说实话,如果现在让我选,我对Razor的喜好要比NVelocity或者T4等等的模板引擎更多一些,当然了,个人看法而已.只是我在公 ...
- VS Extension+NVelocity系列(二)——让VS支持 NVelocity的智能提示(上)
一.基础概念 应该庆幸的是,VS的插件是靠着MEF实现而不是MAF,这让你所做的工作减轻了许多.如果在这之前,您已经了解了MEF的原理,我想对于VS插件的编写,您应该是很容易就能理解的.看看几个VS2 ...
- VS Extension+NVelocity系列(三)——让VS支持 NVelocity的智能提示(中)
一.定义 我们知道,我们的插件是服务于NVelocity的,在你的项目当中,对于NVelocity的模板应当有一个统一的文件扩展名,以便于VS在打开指定扩展名的文件后,就能起到具体的作用. 如果我没有 ...
- VS Extension+NVelocity系列(一)——构建一个简单的NVelocity解析环境
一.前言 本节我们将实际实现一个简单的NVelocity解析环境,以便为以后的实例做一些基本工作,虽然NVelocity如何使用已经属于老掉牙的话题,但我只能专门挑出来一章来做铺垫.人生就是这样无奈啊 ...
- Windbg Extension NetExt 使用指南 【2】 ---- NetExt 的基本命令介绍
摘要 : 本章节介绍NetExt常用的命令. 并且对SOS进行一些对比. NetExt的帮助 要想玩好NetExt, 入门就得看帮助. 看NetExt的帮助可以调用!whelp 命令. 这样hi列举出 ...
- Windbg Extension NetExt 使用指南 【1】 ---- NetExt 介绍
摘要 : 在使用WINDBG做debugging的时候,需要一个好的工具帮助进行数据分析. 最常见的extension包括SOS, PSSCOR. NetExt则是另外一种提供了丰富命令功能的deb ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- PHPmailer关于Extension missing: openssl报错的解决
最近在写一个网页的时候,需要用到PHPmailer来发送邮件,按照官网上给出的demo写出一个例子,却报错Extension missing: openssl 最后发现需要修改php.ini中的配置: ...
- 研究Extension和Category的一个例子
Category: 1. 无法添加实例变量 2.将类的实现分散到多个不同文件或多个不同框架中. Extension: 1. 可以添加实例变量 注: 如果Category的头文件中也使用Extensio ...
随机推荐
- 中国澳门sinox很多平台CAD制图、PCB电路板、IC我知道了、HDL硬件描述语言叙述、电路仿真和设计软件,元素分析表
中国澳门sinox很多平台CAD制图.PCB电路板.IC我知道了.HDL硬件描述语言叙述.电路仿真和设计软件,元素分析表,可打开眼世界. 最近的研究sinox执行windows版protel,powe ...
- AIX6.1/11.2.0.3在有关数据库SWAP一个BUG
昨天南京到客户服务数据库的优化调整,其中新上线,经过审查alert.log当日志现在是在过去一段时间内取得,每隔几个小时的时间滞后,班会报似的内容: Thu Aug 21 09:01:26 2014 ...
- 彩色图像--色彩空间 HSI(HSL)、HSV(HSB)
得知DIP文章66日 转载请注明文章出处:http://blog.csdn.net/tonyshengtan ,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管.欢迎共同开发:https://g ...
- 问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)
不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑.什么是奇葩的bug呢.我的定义是:代码逻辑都一样,但在A处是好的,到了B处就 ...
- Android 4.4(KitKat)表格管理子系统 - 骨架
原文地址:http://blog.csdn.net/jinzhuojun/article/details/37737439 窗体管理系统是Android中的主要子系统之中的一个.它涉及到App中组件的 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(11)-验证码实现和底层修改 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- js手机对应的多级导航分享
js移动导航对应,您可以使用自适应时屏幕,当小画面在一定程度上的网站.使导航出现,The navigation effects such as the following figures:多级导航! ...
- WeakReference and WeakHashMap
弱引用通过WeakReference类实现,弱引用和软引用很像,但弱引用的引用级别更低.对于只有弱引用的对象而言,当系统垃圾回收机制运行时,不管系统北村是否足够,总会回收该对象所占用的内存.当然,并不 ...
- lua for通过循环table一些差异
有两个著名的是:ipairs和pairs,双方都认为,我们都非常熟悉的.其中ipairs刮(idx=1)从明年序遍历,经验nil那退出循环:和pairs遍历,仅仅要里面有值都能够遍历的到. 那假如我须 ...
- Appium:通过wifi连接Android设备
1.首先用USB连接你的Android设备,然后在终端运行命令,它可以启动设备的5555端口使其在网络上可以连接. adb tcpip 2.现在断开USB连接,然后确保设备和你的电脑连接同一个无线网络 ...