此篇仅仅是因为好奇,实现的是完全没有价值的东西,当然,通过此篇的尝试,后续可以在适当的场景,深入的研究Visual Studio自定义插件的应用。

实现功能如下:

在鼠标选中的地方,显示一下创建人,创建时间

1.创建一个VSIX项目

新建项目--Visual C#--Extensibility--VSIX Project

2.创建一个Command

新建项--Visual C#--Extensibility--Custom Command

3.修改Command中的MenuItemCallback回调,代码如下:

void ShowErrorMessageBox(string message)
{
//类似于MessageBox.Show
VsShellUtilities.ShowMessageBox(this.ServiceProvider, message, "错误提示",
OLEMSGICON.OLEMSGICON_INFO,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST
);
}
private void MenuItemCallback(object sender, EventArgs e)
{
//主要逻辑实现地方
var dte = this.ServiceProvider.GetService(typeof(DTE)) as DTE;
//dte超级博大精深,逻辑实现可以通过dte作为接入口入手
//dte.Solution.SolutionBuild.Build();//实现编译
//dte.Solution.SolutionBuild.Run();//实现运行
//.....
if (dte.ActiveDocument == null)
{
ShowErrorMessageBox("不能插入代码,没有打开文档!");
return;
}
//获取当前活动的文档作为代码文档
var textDocument = dte.ActiveDocument.Object("TextDocument") as TextDocument; if (textDocument == null || textDocument.Selection == null)
{
ShowErrorMessageBox("不能插入代码,当前文档不是活动文档!");
return;
}
else
{
//实现插入的文本
string text = string.Format(@"// Author:lcw
// CreateTime:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//选中位置插入
textDocument.Selection.Insert(text, );
textDocument.Selection.SmartFormat();
}
//string message = string.Format(CultureInfo.CurrentCulture, "Inside {0}.MenuItemCallback()", this.GetType().FullName);
//string title = "MyCommand";
//// Show a message box to prove we were here
//VsShellUtilities.ShowMessageBox(
// this.ServiceProvider,
// message,
// title,
// OLEMSGICON.OLEMSGICON_INFO,
// OLEMSGBUTTON.OLEMSGBUTTON_OK,
// OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
}

4.修改MenuItem显示名称ButtonText,在CommandPackage.vsct文件中的Button节点下:

<Button guid="guidMyCommandPackageCmdSet" id="MyCommandId" priority="0x0100" type="Button">
<Parent guid="guidMyCommandPackageCmdSet" id="MyMenuGroup" />
<Icon guid="guidImages" id="bmpPic1" />
<Strings>
<ButtonText>添加注释</ButtonText>
</Strings>
</Button>

5.编译--双击debug下的*.vsix文件安装

6.卸载--工具--扩展和更新--vsix名称--卸载

vs 自定义插件(扩展工具)的更多相关文章

  1. jQuery 第九章 工具方法之插件扩展 $.extend() 和 $.fn.extend()

    $.extend() $.fn.extend() -------------------------------------------------- $.extend() 插件扩展(工具方法) jq ...

  2. jQuery笔记之工具方法extend插件扩展

    jQuery工具方法 $.extend()插件扩展(工具方法) $.fn.extend()插件扩展(实例方法) 浅度克隆.深度克隆 两个方法基本是一样的,唯一不同的就是调用方式不一样 -------- ...

  3. 如何编写Vault插件扩展Vault Explorer的功能

    今天练习了一下Vault Explorer的扩展程序,基本上是Vault SDK中的HelloWord示例程序.如果你刚刚开始接触Vault的二次开发,希望对你有帮助. 开始之前,你需要安装Vault ...

  4. CKEditor在线编辑器增加一个自定义插件

    CKEditor是一个非常优秀的在线编辑器,它的前身就是FCKEditor,CKEditor据官方说是重写了内核的,但功能和性能比FCKEditor更为强大和优越.记得07年的时候第一次接触FCKEd ...

  5. Qt之自定义插件(for Qt Designer)

    之前Blog里面有关于QWT的编译.配置.使用的文章,分别是在VS与Creator下进行的. QWT编译.配置.使用(VS2010 + Qt5.1.0). QWT编译.配置.使用(Qt Creator ...

  6. QML插件扩展(一)

    准备分两节来介绍QML扩展插件,分别为 (一)基于QML文件的扩展方式 (二)基于C++的插件扩展 这篇先介绍基于QML的插件扩展. 先介绍几个基本概念: qmldir: 用于组织自定义的QML插件, ...

  7. jQuery源码分析-03扩展工具函数jQuery.extend

    // 扩展工具函数 jQuery.extend({ // http://www.w3school.com.cn/jquery/core_noconflict.asp // 释放$的 jQuery 控制 ...

  8. Adams 2013自定义插件方法zz

    1.Adams插件介绍 Adams的高级模块(如Controls控制模块.Vibration振动模块.Durability耐久性模块等)是以插件的形式集成在Adams软件中.通过Adams提供的插件管 ...

  9. Chrome插件(扩展)

    [干货]Chrome插件(扩展)开发全攻略   写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均 ...

随机推荐

  1. Thunder团队第三周 - Scrum会议6

    Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:宋雨 工作照片: 代秋彤照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblogs ...

  2. 20162328蔡文琛week02

    学号 20162328 <程序设计与数据结构>第2周学习总结 教材学习内容总结 这周学习了课本中的第二章内容,比起第一章,本章难度有略微底稿,从刚开始的显示字符转变为简单的加减乘除运算,经 ...

  3. windows下cudnn的安装过程

    在CUDA安装成功之后,系统环境变量中会有如下两个变量显示:CUDA_PATH和CUDA_PATH_8 在安装完CUDA之后,到官网下载与其版本对应的CUDNN        下载地址:https:/ ...

  4. css3边框阴影效果

    下面来说下css3阴影的语法: box-shadow:none | <shadow> [ , <shadow> ]* <shadow> = inset? & ...

  5. 【week5】psp

    本周psp psp饼图: 随笔字数折线图: 代码行折线图:

  6. 使用LoadRunner脚本采集Linux性能数据

    前面介绍过在LoadRunner的Java协议实现“使用SSH连接Linux”.下面的脚本,是在LoadRunner里连接Linux/Unix远程服务器,收集其磁盘IO的负载到测试结果. 涉及到三个知 ...

  7. python爬虫--打开爬取页面

    def requests_view(response): import webbrowser requests_url = response.url base_url = '<head>& ...

  8. 身份证验证php

    /**  * 验证身份证号  * @param $vStr  * @return bool  */ function isCreditNo($vStr) {     $vCity = array(   ...

  9. 【Python】python基础_代码编写注意事项

    1. 说明使用的编译方式 1 #!/usr/bin/python 2. 说明字符编码方式 1 #coding=utf-8 3. print 默认输出是换行的,如果要实现不换行需要在变量末尾加上逗号 # ...

  10. 【EF】EF扩展库(批量操作)

    EF删除和修改数据只能先从数据库取出,然后再进行删除 delete from Table1 where Id>5; update Table1 set Age=10; 我们需要这样操作 //删除 ...