一、基础概念

应该庆幸的是,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

.Net4下的MEF(Managed Extensibility Framework) 架构简介

MSDN:Extending the Editor

VS Extension+NVelocity系列(二)——让VS支持 NVelocity的智能提示(上)的更多相关文章

  1. VS Extension+NVelocity系列(三)——让VS支持 NVelocity的智能提示(中)

    一.定义 我们知道,我们的插件是服务于NVelocity的,在你的项目当中,对于NVelocity的模板应当有一个统一的文件扩展名,以便于VS在打开指定扩展名的文件后,就能起到具体的作用. 如果我没有 ...

  2. CSS3系列二(媒体支持、文字与字体相关样式、盒相关样式)

    CSS3媒体支持 在css3中允许我们在不改变内容的情况下,在样式中选择一种页面的布局以精确的适应不同的设备,从而改善用户体验 可以利用meta标签在页面中指定浏览器在处理本页面时按照多少像素的窗口宽 ...

  3. vs2015 不支持javascript的智能提示高亮

    有些人安装了vs2015后发现居然不支持javascrpt的高亮功能,连工具-选项-文本编辑器里面的javascript也没有了,楼主也碰到这么个情况了,估计是有与装了多个版本的原因,楼主电脑安装了V ...

  4. vscode 支持 threejs 的智能提示

    VSCode Typings and Intellisense: Dummy Learning VS-Code 1 Jun 20, 2016 Updated on Jun 20 2016 for 1. ...

  5. 让NVelocity做更多的事,VS Extension+NVelocity系列

    我不知道园子里到底有多少人喜欢使用NVelocity这个模板引擎,其实说实话,如果现在让我选,我对Razor的喜好要比NVelocity或者T4等等的模板引擎更多一些,当然了,个人看法而已.只是我在公 ...

  6. Eclipse安装插件支持jQuery智能提示

    Eclipse安装插件支持jQuery智能提示 最近工作中用到jQuery插件,需要安装eclipse插件才能支持jQuery智能提示,在网上搜索了一下,常用的有三个插件支持jQuery的智能提示:1 ...

  7. sed修炼系列(二):sed武功心法(info sed翻译+注解)

    sed系列文章: sed修炼系列(一):花拳绣腿之入门篇sed修炼系列(二):武功心法(info sed翻译+注解)sed修炼系列(三):sed高级应用之实现窗口滑动技术sed修炼系列(四):sed中 ...

  8. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

随机推荐

  1. python从字符串中提取数字,使用正则表达式

    使用正则表达式 import re D = re.findall(r"\d+\.?\d*",line) print(D) -7.23246 10.8959 5.19534 0.06 ...

  2. sublim插件(待续)

    imesupport SublimeText3默认不支持输入法跟随光标,这在输入中文的时候看起来不方便. 进入SublimeText3在上面菜单栏里Perferences点击PackageContro ...

  3. BZOJ 4247 挂饰 01背包

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4247 JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机 ...

  4. apache单ip配置多端口多站点

    1.修改 /etc/httpd/conf/httpd.conf 添加一个Listen,如: Listen 80 Listen 8001 Listen 8002 2.添加一个VirtualHost #v ...

  5. 解决windows下Composer因php_openssl扩展缺失而安装失败的问题

    Composer( https://getcomposer.org/ )是PHP下的一个依赖管理工具.你可以在你的项目中声明你所需要用到的类库,然后Composer会在项目中为你安装它们.如果你了解N ...

  6. JT796、JT1077部标平台检测报名须知

    检测报名须知 申请道路运输车辆卫星定位系统平台标准符合性检测时,请先将1检测意向单(只针对企业监控平台).2符合性检测申请材料(基本材料包括:申请函.授权人身份证复印件.检测登记表.运输企业信息表.平 ...

  7. java乱码问题

    我们知道JSP页面是需要转换为servlet的,在转换过程中肯定是要进行编码的.在JSP转换为servlet过程中下面一段代码起到至关重要的作用. <%@ page language=" ...

  8. django+xadmin在线教育平台(七)

    4-3 新建项目 Python2.7 创建虚拟环境. mkvirtualenv mxonline2 安装django pip install django==1.9.8 注意Python2下此处必须用 ...

  9. Mysql: pt-table-checksum 和 pt-table-sync 检查主从一致性,实验过程

    一.安装 percona 包 1.安装仓库的包 https://www.percona.com/doc/percona-repo-config/yum-repo.html sudo yum insta ...

  10. IE6兼容png图片

    <!--[if IE 6]> <script src="/js/DD_belatedPNG.js"></script> <script&g ...