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插件开发实例,主要是对插件工程的基本创建步骤进行了讲解,这篇文章当中 ...
随机推荐
- android 推断应用程序是系统程序还是用户程序
直接上代码: AppInfo.java <span style="font-size:18px;">package com.example.packages; publ ...
- PC结束 Spark 二次开发 收到自己主动,并允许好友请求
本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自己主动加入好友.而客服放则需自己主动加入好友,不同弹出对话框进行允许,这方便的广大客服. 如今废话不多说,直接上代码. pa ...
- list-style-type 去除li 前面的标记(小黑点)
list-style-type 设置标记的样式(或者隐藏标记) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- 基于PHP的crontab定时任务管理
BY JENNER · 2014年11月10日· 阅读次数:6 linux的crontab一直是server运维.业务开展的利器.但当定时任务增多时,管理和迁移都变得非常麻烦,并且easy出问题.以下 ...
- DevExpress XtraReports 入门一 创建 Hello World 报表
原文:DevExpress XtraReports 入门一 创建 Hello World 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更 ...
- C语言优化实例:为了消除嵌套switch-case聪明的做法
我们有可能会写出或者遇到类似这种代码: C/C++ switch (expr1) { case label11: switch (expr2) { case label21: // do someth ...
- Web Api 2, Oracle and Entity Framework
Web Api 2, Oracle and Entity Framework I spent about two days trying to figure out how to expose the ...
- ODP.NET 之访问 Oracle 数据库
ODP.NET 之访问 Oracle 数据库 要相使用 Oracle Data Provider For .NET(ODP.NET), 必须先安装 ODP.NET 或者是 ODAC(Oracle Da ...
- windows下系统移植到linux下出现的问题
今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...
- 【SSH三个框架】Hibernate第七基金会:不少下属业务
相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系,但也有许多关系.但,只知道它是不够的,Hibernate它是一种面向对象 ...