zoukankan      html  css  js  c++  java
  • 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打开它,您会发现以下内容:

    image

    extension.vsixmanifest文件会告诉VS它所依赖的.Net版本、引用的内容、dll、作者信息等内容。

    抱歉[Content_Types].xml作用不解.

    而其他内容就是我们编译我们的SDK项目所生成的东西.

    那么这些内容会放到哪呢?

    当你安装一个.vsix文件后,打开以下目录(Win7下默认路径):

    C:UsersAdministratorAppDataLocalMicrosoftVisualStudio11.0Extensions

    这里面有命名正规的,像Microsoft这样的文件夹,还有像53w4yfez.zmc这样的文件夹

    image

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

    image

    VS插件的组合容器就是从这个目录来获取你的插件(部件)的.

    有趣的发现

    其实你会发现一件事情,微软的产品还是很喜欢.cab和.zip文件的.Office的InfoPath保存的.xsn文件也是如此.里面也是一堆文件.所以当你试图研究某个微软的产品的时候,不妨改成zip扩展名试试:)

    三、创建“NVelocity编写插件”项目

    安装完VS2012的SDK在创建项目的时候,你会发现多出来这么一些项目:

    image

    “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

  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/kevinchoi/p/3924133.html
Copyright © 2011-2022 走看看