繁体   English   中英

尝试创建ssms加载项的问题

problem with trying to create ssms add-in

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试为SSMS 2008和/或2008 R2创建一个加载项,但我马上就遇到了问题。

我可以让我的加载项工作,并在SSMS启动时让它只显示一个消息框。

但是,在下载各种代码示例后,在尝试引用Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache时,我得到一个空引用异常:

Commands2 commands = (Commands2)ServiceCache.ExtensibilityModel.Commands;

我在使用SSMS 2008或SSMS 2008 R2时遇到此问题。 我正在研究Visual Studio 2010。

这有点令人沮丧,因为我渴望了解更多有关SSMS加载项的知识,但似乎无法通过那里的少量样本。

任何建议/提示赞赏。

谢谢

6 个回复

Karl,我不知道你的具体问题,但回答另一个问题,我遇到了一些关于编写SSMS插件的文章和链接 - 也许其中一个对你有用:

有些信息可以在这里找到:

ServiceCache是​​不可靠的 - 从版本到版本它支持越来越少,可能会在某些时候消失。

如果您编写SSMS加载项,则可以通过访问VS ApplicationModel来访问内部。 像这样的东西:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _addInInstance = (AddIn)addInInst;
            _applicationObject = _addInInstance.DTE as DTE2;

_applicationObject包含命令和其他有趣的东西。

请注意 ,OnConnection的应用程序参数传入的对象不正确。这就是为什么必须使用此行来获取正确的对象: _applicationObject = _addInInstance.DTE作为DTE2;

我一直在努力解决这个问题。

我有一个加载项在sql 2008中有用 - 用VS2008编写。

我将项目升级到VS2010并开始致力于使sql 2008 r2加载项正常工作 - 我无法将这项工作用于爱情或金钱。

我尝试了很多不同的东西; *删除并重新添加所有引用。 *改变目标框架。 不是香肠。

没有什么工作....直到我回到VS2008 - 我做了改变。 (参见Jonathan Kehayias博客: https ://www.sqlskills.com/blogs/jonathan/sql-server-2012-extended-events-add-in-to-manage-2008r2-instances/)

欢迎新版本!

好的我找到解决方案,问题出在CLR2.0和CLR 4.0之间

资料来源: http//blogs.msdn.com/b/mshneer/archive/2010/03/19/com-shim-wizards-for-vs-2010.aspx

在Visual Studio 2010中调试面向CLR 2.0的加载项

如果加载项在CLR 2.0中加载,我在调试加载项时遇到了一些问题。 我会按F5,Excel会启动,我的加载项会运行,但断点没有被击中。 因此,我希望分享正在发生的事情,以及如何以F5体验未完全打破的方式设置您的环境。

我通常调试共享加载项的方式没有任何魔力 - 无论是shimmed还是unsimimmed。 我在Connect.cs文件中的OnConnection方法中设置断点,打开项目属性,转到Debug部分,选择“Start External Program”选项并设置我的Office应用程序的完整路径(例如“C:\\ Program Files \\” Microsoft Office \\ Office12 \\ EXCEL.EXE“)。 接下来,我右键单击Solution Explorer中的项目节点,然后选择“Set As Startup Project”。 当我按F5时,我的断点被击中。

在Visual Studio 2010中,如果我的加载项在CLR 2.0中加载,则不会触发断点。 发生的事情是调试器无法连接到CLR 4.0和CLR 2.0 - 它实际上需要知道它是否应该使用CLR 2.0调试引擎或CLR 4.0调试引擎。 按F5时,调试器会尝试猜测在此过程中将启动哪个CLR。 启发式基于读取EXE的.config文件,其中只需要指定所需的运行时版本,如果找不到.config文件,则调试器将启动CLR 4.0调试引擎。 众所周知,Office应用程序没有绑定到任何特定版本的CLR,因此启发式失败了。

实际上有两种方法可以解决它 - 一种是将.exe.config文件放在.exe本身旁边,例如在调试Excel 2007时,我将创建Excel.exe.config并将其保留在“C:\\ Program Files \\”中Microsoft Office \\ Office12“文件夹。

但我处理这个问题的首选方式是不同的。 在解决方案资源管理器中,我将右键单击我的解决方案节点并选择“添加” - >“现有项目”并打开“C:\\ Program Files \\ Microsoft Office \\ Office12 \\ EXCEL.EXE”。 接下来,我将右键单击这个新添加的项目并选择“Set As Startup Project”。 接下来,我将打开此项目的属性,并将“Debugger Type”属性设置为“Managed(v2.0,v1.1,v1.0)”。 现在,我将F5和我在OnConnection方法中设置的断点将被命中。

我有同样的问题。 我认为这是框架的喜欢

使用Framework 3.5

ServiceCache.ExtensibilityModel不为null

使用Framework 4.0

“ServiceCache.ExtensibilityModel”为空

好的,谢谢你这样,但是如果我在Framework 3.5中有一个项目,那么VS2010并没有停留在我的断点上。 但如果我将Framework更改为4,VS2010将在断点处停止。 但CreateToolWindow2引发异常,因为框架不一样!

我将代码简化为最小化:

    /// <summary>Implements the OnConnection method of the IDTExtensibility2 interface. Receives notification that the Add-in is being loaded.</summary>
    /// <param term='application'>Root object of the host application.</param>
    /// <param term='connectMode'>Describes how the Add-in is being loaded.</param>
    /// <param term='addInInst'>Object representing this Add-in.</param>
    /// <seealso class='IDTExtensibility2' />
    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {            
       _addInInstance = (AddIn)addInInst;
       _applicationObject = (DTE2)_addInInstance.DTE;

       if (connectMode == ext_ConnectMode.ext_cm_Startup)//ext_ConnectMode.ext_cm_UISetup)
       {
       }        
    }

    /// <summary>Implements the OnStartupComplete method of the IDTExtensibility2 interface. Receives notification that the host application has completed loading.</summary>
    /// <param term='custom'>Array of parameters that are host application specific.</param>
    /// <seealso class='IDTExtensibility2' />
    public void OnStartupComplete(ref Array custom)
    {            
       Windows2 win2 = this._applicationObject.Windows as Windows2;

       if (win2 != null)
       {
           Assembly asm = Assembly.GetExecutingAssembly();
           AddIn addinobj;

           addinobj = this._applicationObject.AddIns.Item(1);

           object controlObject = null;

           Guid id = new Guid("4c410c93-d66b-495a-9de2-99d5bde4a3b9"); // this guid doesn't seem to matter?
           //Window                 
           Window windowTool = win2.CreateToolWindow2(addinobj,
                                                      asm.Location,
                                                      "MyAddinASupp.UserControl1",    "Zone de test", 
                                                      "{" + id.ToString() + "}",
                                                      ref controlObject);

          windowTool.Visible = true;
       }
    }
1 从VS2010创建SSMS加载项

我正在尝试使用http://blogs.microsoft.co.il/blogs/shair/archive/2008/07/28/how-to-create-sql-server-management- studio-addin.aspx我知道这篇文章有点过时了,但我设法再次达到本文的目的h ...

2 SSMS加载项警告

我有sql server 2012的这个加载项跟随作者提到的一切,但仍然坚持这不是一个真正的错误,但无法想象如何通过这个 如何从SQL Server Management Studio的历史记录中删除“服务器名称”项 通过上述问题,但无法确定这是否相关(我认为不是) 我正在关注 ...

3 SSMS加载项可以访问结果集吗?

SSMS加载项可以访问结果集吗? 我想要一个加载项工具菜单项,该项可以为剪贴板中的最新返回结果集中的每个结果生成DECLARE @Result1 TABLE ( ... ) (包括名称,类型,长度,精度等)。 。 我看到了一些有关直接访问结果Grid UI的讨论,但是到那时,某些元数据将不得 ...

4 如何从SSMS加载项向SSMS“消息”选项卡输出内容

我正在使用SSMS 2014插件,我需要将内容输出到活动文档的“消息”选项卡中。 我知道我可以得到这样的文件: 但我无法弄清楚如何访问其“消息”选项卡(对此也无法访问其“结果”选项卡) 当然,与SSMS插件一样,没有文档。 ...

6 使用Visual Studio 2013的SSMS加载项

因此,我正在尝试为sql management studio创建一个简单的加载项,该加载项仅格式化一个简单的列表。 我知道在实际功能范围内我将以何种方式实现这一目标,但是在开始编码之前我就遇到了问题! 当我重定向应用程序以打开SQL时,它将显示以下消息:(我打算发布图像,但是我的代表不够高) ...

7 SSMS加载项以设置脚本选项

在SSMS加载项中,以下代码将在10到22之间切换文本编辑器窗口的fontsize: 不是特别有用,但它表明我的加载项可以设置SSMS工具/选项属性,在这种情况下使用类别/页面名称“FontsAndColors”,“TextEditor”。 我真正希望我的加载项做的是将脚本选项“I ...

8 如何使用SSMS加载项连接新查询脚本?

我正在尝试创建一个SSMS加载项。 我想要做的一件事是创建一个新的查询窗口并以编程方式将其连接到服务器实例(在SQL登录的上下文中)。 我可以很好地创建新的查询脚本窗口,但我无法找到如何连接它而无需先手动连接到其他东西(如对象资源管理器)。 换句话说,如果我手动将Obect Explo ...

10 Outlook加载项问题

我的情况是: 我在Visual Studio 2013上开发了一个Outlook加载项,然后通过InstallShield构建到MSI安装。 和我的MSI配置文件中的设置注册表遵循以下2种方式: HKEY_CURRENT_USER: + HKEY_CURRENT_USER \\ ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM