SSMS2008插件开发(3)--部署调试SSMS2008插件
原文:SSMS2008插件开发(3)--部署调试SSMS2008插件
上一次说到VS2008中的插件开发,最终结果插件是部署在VS2008中,现在我们将插件部署到SSMS2008(Microsoft Sql Server Management Studio 2008)中。可以参考一下这里。
打开上一次的项目MySSMSAddin,右“解决方案资源管理器”中右击该项目,选择“属性”,进入该项目的属性设置界面。在“应用程序”选项卡中,将“程序集名称”改为“MySSMSAddin”,这不是必须的,但我习惯程序集名称与项目名称相同。
在“生成”选项卡中,选中“为COM互操作注册”。这样才可以向注册表中注册我们写的DLL文件。另外一个方法是增加一个安装项目,由安装项目来注册。
在“调试”选项卡中,将“启动外部程序”那项的内容改为SSMS可执行文件,该文件在SQL2008的安装目录中的100\Tools\Binn\VSShell\Common7\IDE中的Ssms.exe,要包含路径,我的机器是“C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe”。将“命令行参数”中的内容清空。将“工作目录”设置为SSMS.EXE所在目录,我的机器是“C:\Program Files\Microsoft
SQL Server\100\Tools\Binn\VSShell\Common7\IDE\”。
添加一些操作SSMS需要用的类库(DLL文件),SQL安装目录(C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE)中的SqlWorkbench.Interfaces.dll和Microsoft.SqlServer.SqlTools.VSIntegration.dll。
在注册表中增加如下图内容,SSMS所有的插件都需要在Addins中注册(如果没有Addins请自行添加),其中MySSMSAddin.Connect是插件的全名称,前面表示命名空间,后面表示类名。LoadBehavior为双字节值(DWORD)。下图中的内容也可以添加在HKEY_CURRENT_USER中,不过这样的话插件就只能由当前用户使用,对其他用户不可见。
此时如果打开SSMS2008,会发现报错,因为我们的DLL并没有进行注册,要注册很简单,编译一下我们的项目(MySSMSAddin)就可以,但是编译后再打开SSMS2008仍然会报错,这是因为获取SSMS2008的APPLICATION(DTE)对象和VS2008中的不一样。
打开Connect.cs,找到OnConnection方法的,将第一行的内容
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
改成
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)ServiceCache.ExtensibilityModel;
注意,需要引用命名空间using Microsoft.SqlServer.Management.UI.VSIntegration;
此时,运行程序,发现VS2008自动运行SSMS2008,并且没有任何错误,但是工具菜单中并没有找到“Test Menu“这个菜单项。这是因为SSMS2008加载插件的时候,其状态并不是ext_ConnectMode.ext_cm_UISetup而是ext_ConnectMode.ext_cm_Startup(关于ext_ConnectMode枚举的说明请参考这里),将OnConnection方法中的代码
if(connectMode == ext_ConnectMode.ext_cm_UISetup)
改成
if (connectMode == ext_ConnectMode.ext_cm_Startup)
现在运行程序,会发现SSMS2008的工具菜单中出现了我们定义的菜单,并且点击也会弹出“Hello World”。效果如下图:
关于调试:要调试SSMS的插件,就和正常的代码一样,在需要的地方增加断点即可。
下一次将会详细介绍SSMS2008中增加菜单、访问各种对象的方法。
这次的相关DEMO项目在我的资源中。
SSMS2008插件开发(3)--部署调试SSMS2008插件的更多相关文章
- SSMS2008插件开发(4)--自定义菜单
原文:SSMS2008插件开发(4)--自定义菜单 打开上次的项目MySSMSAddin中的Connect类,发现该类继于了两个接口:IDTExtensibility2和IDTCommandTarge ...
- SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍
原文:SSMS2008插件开发(2)--Microsoft Visual Studio 2008插件开发介绍 由于开发SSMS2008插件是通过VS2008进行的,有必要先介绍一下VS2008的插件开 ...
- SSMS2008插件开发(1)--介绍
原文:SSMS2008插件开发(1)--介绍 SSMS2008就是Microsoft Sql Server Management Studio 2008的简称.许多人叫做SQL2008或SQL SER ...
- 【 VS 插件开发 】三、Vs插件简单功能的实现
[ VS 插件开发 ]三.Vs插件简单功能的实现
- 使用pycharm进行远程开发部署调试设置 与 远程部署调试是否必须使用远程主机的解释器?
远程开发部署调试目的: 配置pycharm远程部署调试主要用于本地代码与远程服务器上的代码进行同步,使得本地代码经过修改后,可以很容易的同步到远程服务器上.同时设置pycharm的解释器为远程服务器的 ...
- vue 在浏览器控制台怎么调试 谷歌插件vue Devtools
vue 在浏览器控制台怎么调试 谷歌插件vue Devtools 问题: vuejs里面的变量,怎么用浏览器的console查看? 例如,想在chrome里用console.log查看变量$data, ...
- 在idea中用tomcat远程部署调试
适用于生产环境下的调试. 1.catalina配置 在服务器的bin下创建setenv.sh,内容如下 1099是jmx,最后是服务器ip 2.启动tomcat ./catalina.sh jpda ...
- vuejs-devtools浏览器调试chrome插件
vuejs-devtools浏览器调试chrome插件(360极速浏览器也可以安装,需要FQ)https://chrome.google.com/webstore/detail/vuejs-devto ...
- 【eclipse插件开发实战】 Eclipse插件开发6——eclipse在线翻译插件Translator开发实例详解
Eclipse插件开发6--eclipse在线翻译插件Translator开发实例详解 在上一篇文章中讲到了一个简单的eclipse插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...
随机推荐
- 高通公司 MSM8K GPT异常原因分析无法开机的问题
问题分析过程如下面: 一. MSM8916台gpt概率问题:采用QPST emmc software download下载软件工具后,无法开机.例如下面的附图: log分析是userdata分区未成功 ...
- NSIS:禁止选择安装路径和编辑安装目录
原文 NSIS:禁止选择安装路径和编辑安装目录 如果你想在安装包中禁止用户选择安装路径和编辑安装目录,有两种方式. 第一种:注释或删除安装目录选择页面 1 ;!insertmacro MUI_PA ...
- bootstrap之Click大事
上一篇文章中谈到了bootstrap流程,本文开始把目光bootstrap它可以接受指令(从源代码视图的透视.因为appium该项目现在还处于不断更新,因此,一些指令已经实现.也许未来会实现一些.从视 ...
- Android IPC通信和AIDL技术应用
首先我们了解一下 IPC和AIDL IPC:进程间通信 AIDL:Android Interface Definition Language,即Android接口定义语言. 为什么使用: Androi ...
- 超可爱 纯CSS3实现的小猪、小老鼠、小牛
原文:超可爱 纯CSS3实现的小猪.小老鼠.小牛 利用纯CSS3绘制一些人物.动物.风景已经不是一件新鲜的事情了,主要是利用CSS3可以让直线变成任意的曲线,于是简单的矢量图形绘制对CSS3来说就小菜 ...
- 标签(Tag)的各种设计方案
标签(Tag)的各种设计方案 首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种 ...
- easyUI的combobox实现级联
先简介下combobox: easyUI重写了select,取而代之的是combobox,有例如以下几种方式能够创建一个combobox 1.使用select标签,并加上class="eas ...
- Android - 错: java.lang.IllegalStateException: Already attached
错: java.lang.IllegalStateException: Already attached 本文地址: http://blog.csdn.net/caroline_wendy 可能原因: ...
- JS如何判断包括IE11在内的IE浏览器
原文:JS如何判断包括IE11在内的IE浏览器 今天碰到一个奇怪的问题,有一个页面,想指定用IE浏览器打开,在VS开发环境没有问题,但部署到服务器上,即使是用IE打开页面,还是提示"仅支持I ...
- mysql_SQL_按照日统计微博数
主要备忘: DATE_FORMAT 函数 1:微博对比图(按日统计) SELECT DATE_FORMAT(tw.article_publish_time, '%Y-%m-%d'),count(pag ...