- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
此问题引用了此处找到的 SSMSAddinDenali SQL Server Management Studio 2012 插件 http://ssmsaddin2012.codeplex.com/SourceControl/changeset/view/19629#101185 .在尝试构建 SSMS 2012 插件时,我无法使用 .Net 4.0/4.5 实现 IObjectExplorerService。我想知道是否有人可以公开有关连接到 ObjectExplorerService 的更多信息;如何在数据库表上下文菜单中创建菜单项。我收到此错误(无法将类型 Microsoft.SqlServer.Management.SqlStudio.Object.ObjectExplorerService 转换为类型 Microsoft.SqlServer.Management.SqlStudio.Object.ContextService)
为了构建它我需要更新的重要引用资料:
Microsoft.SqlServer.Management.SDK.SqlStudio
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Microsoft.SqlServer.Management.Sdk.SqlStudio.dll 版本 11.0.0.0
Microsoft.SqlServer.Management.SqlStudio.Explorer
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Extensions\Application\Microsoft.SqlServer.Management.SqlStudio.Explorer.dll 版本 11.0.0.0
SQLPackageBase
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlPackageBase.dll 版本 11.0.0.0
SqlManagerUI
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SQLManagerUI.dll 版本 11.0.0.0
SqlWorkbench.Interfaces
C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\SqlWorkbench.Interfaces.dll 版本 11.0.0.0
在我构建我的插件并在 SSMS 2012 中运行它之后,我使用显示的代码在 try catch 中遇到了这个错误
如有任何进一步的帮助,我们将不胜感激!
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
//debug_message("OnConnection::");
//_applicationDTE = (DTE)application;
//_applicationObject = (DTE2)application;
//_addInInstance = (AddIn)addInInst;
//return;
//if (connectMode == ext_ConnectMode.ext_cm_UISetup)
//{
// object[] contextGUIDS = new object[] { };
// Commands2 commands = (Commands2)_applicationObject.Commands;
// string toolsMenuName = "Tools";
// //Place the command on the tools menu.
// //Find the MenuBar command bar, which is the top-level command bar holding all the main menu items:
// Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = ((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["MenuBar"];
// //Find the Tools command bar on the MenuBar command bar:
// CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName];
// CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;
// //This try/catch block can be duplicated if you wish to add multiple commands to be handled by your Add-in,
// // just make sure you also update the QueryStatus/Exec method to include the new command names.
// try
// {
// //Add a command to the Commands collection:
// // add + (int)vsCommandStatus.vsCommandStatusEnabled if we want the default state to be enabled
// Command command = commands.AddNamedCommand2(_addInInstance, "FormatSQL", "Format SQL", "Executes the command for SSMSAddinDenali", true, 59, ref contextGUIDS, (int)vsCommandStatus.vsCommandStatusSupported + (int)vsCommandStatus.vsCommandStatusEnabled, (int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);
// //Add a control for the command to the tools menu:
// if ((command != null) && (toolsPopup != null))
// {
// command.AddControl(toolsPopup.CommandBar, 1);
// }
// }
// catch (System.ArgumentException)
// {
// //If we are here, then the exception is probably because a command with that name
// // already exists. If so there is no need to recreate the command and we can
// // safely ignore the exception.
// }
//}
#region Object Explorer Context Event
try
{
/* Microsoft.SqlServer.Management.UI.VSIntegration.ServiceCache
* is from SqlPackageBase.dll and not from Microsoft.SqlServer.SqlTools.VSIntegration.dll
* the code below just throws null exception if you have wrong reference */
ObjectExplorerService objExplorerService;
ContextService cs;
NavigationService ns;
objExplorerService = (ObjectExplorerService)ServiceCache.ServiceProvider.GetService(typeof(Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.IObjectExplorerService));
cs = (ContextService)objExplorerService.Container.Components[0];
//cs.ObjectExplorerContext.CurrentContextChanged += new NodesChangedEventHandler(ObjectExplorerContext_CurrentContextChanged);
//cs.UtilityExplorerContext.CurrentContextChanged += new NodesChangedEventHandler(UtilityExplorerContext_CurrentContextChanged);
ns = (NavigationService)objExplorerService.Container.Components[1];
//objExploreS = (ObjectExplorerService)objExplorerService.Container.Components[2];
//sqlStudioExplorer = new SqlStudioExplorer();
//ObjectExplorerService objExplorerService = (ObjectExplorerService)ServiceCache.ServiceProvider.GetService(typeof(IObjectExplorerService));
//INodeInformation node = objExplorerService.FindNode(cs.Context);
//if (node.Parent.InvariantName.Equals("Databases"))
//{
// if (_databaseMenu == null)
// {
// string value = typeof(IMenuHandler).ToString();
// _databaseMenu = (HierarchyObject)node.GetService(typeof(IMenuHandler));
// String wtf = _databaseMenu.ToString();
// RestoreMenuItem rst = new RestoreMenuItem();
// _databaseMenu.AddChild(string.Empty, rst);
// }
//}
//ContextService cs = (ContextService)objExplorerService.Container.Components[0];
//cs.ObjectExplorerContext.CurrentContextChanged += new NodesChangedEventHandler(Provider_SelectionChanged);
// for some reason calling GetSelectedNodes forces to add ContextService to ObjectExplorerService.Container.Components
//int count = objExplorerService.Container.Components.Count;
//int nodeCount; INodeInformation[] nodes;
//objExplorerService.GetSelectedNodes(out nodeCount, out nodes);
//count = nodeCount; count = nodes.Length;
//count = objExplorerService.Container.Components.Count;
//ContextService contextService = (ContextService)objExplorerService.Container.Components[1];
//INavigationContextProvider provider = contextService.ObjectExplorerContext;
//provider.CurrentContextChanged += new NodesChangedEventHandler(Provider_SelectionChanged);
}
catch (Exception ex)
{
MessageBox.Show("OnConnection::ERROR " + ex.Message);
}
#endregion
}
最佳答案
我从坟墓里就知道这个。您的问题是因为在数组中 objExplorerService.Container.Components ContextService 并不总是数组中的第一个元素。在我的工作站上,您的代码可以工作,但是当我将我的 ssms 插件提供给其他人时,它不起作用,因为 NavigationServer 位于元素 [0]。当然,在下面的示例中,您需要删除我的日志记录和其他内容,但如果您一年前没有放弃,这应该会让您继续前进。
objExplorerService = (ObjectExplorerService)ServiceCache.ServiceProvider.GetService(typeof(IObjectExplorerService));
//cs = (ContextService)objExplorerService.Container.Components[0];
//cs.ObjectExplorerContext.CurrentContextChanged += new NodesChangedEventHandler(ObjectExplorerContext_CurrentContextChanged);
// cs.UtilityExplorerContext.CurrentContextChanged += new NodesChangedEventHandler(UtilityExplorerContext_CurrentContextChanged);
int count = objExplorerService.Container.Components.Count;
int nodeCount; INodeInformation[] nodes;
objExplorerService.GetSelectedNodes(out nodeCount, out nodes);
count = nodeCount; count = nodes.Length;
count = objExplorerService.Container.Components.Count;
ContextService contextService;
try
{
contextService = (ContextService)objExplorerService.Container.Components[1];
}
catch (Exception ex)
{
using (StreamWriter w = File.AppendText("c:\\temp\\log.txt"))
{
Log(ex.Message, w);
Log("Failed Adding Event ", w);
}
contextService = (ContextService)objExplorerService.Container.Components[0];
}
INavigationContextProvider provider = contextService.ObjectExplorerContext;
provider.CurrentContextChanged += new NodesChangedEventHandler(ObjectExplorerContext_CurrentContextChanged);
关于c# - SSMS 2012 插件 - ObjectExplorerService 在 SSMSAddinDenali 中不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13999352/
我在 SQL Server 上使用深色模式,我尝试更新对象资源管理器菜单的字体和颜色,但我似乎无法从“选项”>“字体和颜色”中找到更新菜单颜色的适当设置。 这是在对象资源管理器中右键单击对象时我的菜单
我遇到过一个实例,我创建了一个新的查询窗口,右键单击以连接到服务器并找到以下选项: 最佳答案 来找出发生这种情况的原因是因为我从一个多实例注册服务器创建了新的查询窗口,如下所示: 只需确保从单个实例化
标题可能有点误导,所以让我澄清一下:我不想知道如何重命名连接字符串或数据库名称。我想知道的是如何在 SQL Management Studio 中为我的数据库连接创建友好标签? 例如我有以下连接: 我
在Visual Studio中,当我选择任何文字时,它将突出显示同一文字的所有出现。 SQL Server Management Studio中是否有类似的功能。 假设我的脚本中有My_Temp_Ta
我在 Windows 7 上使用 SQLServer 2008 R2 Management Studio (10.50.2500.0)。 突然,执行查询的键盘快捷键停止工作。 CTRL-E 命令仍然有
最近我发现,有一个选项可以通过单击 SSMS 工具栏上的按钮来包含要执行的最常用查询。 您可以按照以下步骤操作: 鼠标右键单击工具栏 点击自定义 创建新工具栏 修改一下 添加命令 在查询类别下,可以选
我刚刚从 SSMS 2005 升级到 2012。以前,我可以按 CTRL+R,查询结果窗口就会消失。 升级到 SSMS 后,我运行了一个查询,并出于习惯,按下了 CTRL+R。什么都没发生。在 SSM
我创建了一些 SQL 代码片段,并将它们导入到 SSMS 2016 的“我的代码片段”文件夹中。这工作得很好。 现在我已将片段组织到文件夹中。然后,我已成功将文件夹树添加到代码片段管理器中: 也可以通
我需要从连接到 (localdb)\myinstance 的命令行启动 ssms (SQL Management Studio)。实例存在 sqllocaldb info myinstance 但是将
当我通过 SSMS 浏览多维数据集时,我是否有机会看到生成的查询?我想我可以在数据库上运行跟踪来捕获它,但只是想知道是否有更简单的方法。 谢谢 最佳答案 我不确定 SSMS(trace 除外),但有一
我最近升级到 SSMS 2016 并且我在 2014 年使用的 Redgate 工具仍然存在,但在 2016 年丢失了。我需要卸载并重新安装 Redgate 吗?如果是这样,我需要在这样做之前停用我的
我已将 SSMS 更新到 v18.5,然后卸载 SQL Search,下载最新的并安装。 SSMS 已启动,我单击“SQL 搜索”按钮 - 没有任何错误/异常,但 SQL 搜索未启动。 我在 2 个工
我一直在尝试使用门户中找到的服务器名称通过 SSMS 连接到 AZure 分析服务。然而,有两件事很奇怪:在 SSMS 中,Windows 身份验证呈灰色,并且还导致我出现如下错误。有什么指导吗? 最
我一直在尝试使用门户中找到的服务器名称通过 SSMS 连接到 AZure 分析服务。然而,有两件事很奇怪:在 SSMS 中,Windows 身份验证呈灰色,并且还导致我出现如下错误。有什么指导吗? 最
我创建了一个 SSMS 加载项(使用 Visual Studio 2010 (C#)),它将已执行的 SQL 脚本存储到本地计算机上的文本文件中。我想对查询输出做同样的事情,但找不到涵盖此内容的任何资
是否可以通过 SQL 打印命令更改消息 Pane 输出中 SQL Server Management Studio (SSMS) 中使用的默认字体颜色(颜色)? IF @@TRANCOUNT>0 BE
当尝试在 SSMS - Sql Server 中查看生成的 XML 时,我们在弹出窗口中收到以下错误消息。 Microsoft SQL Server Management Studio Unable
在 SQL Server Management Studio 2017 中,当我创建新图表并向图表添加新表(或添加现有表)时,我无法将 TableView 类型更改为自定义。 此外,当我修改 Tabl
我正在尝试使用 Azure Key Vault 设置一个新的 Always Encrypted 数据库(我之前已经使用过)。在 SSMS Always Encrypted Wizard 中,我可以选择
我的电脑最近崩溃了,我正在重新安装东西。 我想导入我以前 PC 上的注册服务器列表。我有 RegSrvr.xml文件来自 G:\Users\\AppData\Roaming\Microsoft\Mic
我是一名优秀的程序员,十分优秀!