我正在为 SQL Server 2012 Management Studio 创建一个加载项,该加载项将自定义按钮添加到表的上下文菜单中。
我在 codeplex 上使用了以下项目的源代码作为指导:
代码如下:
void ObjectExplorerContext_CurrentContextChanged(object sender, NodesChangedEventArgs args)
{
debug_message("ObjectExplorerContext_CurrentContextChanged::");
try
{
// Getting current node context
Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorer.INavigationContextProvider navigationContextProvider = (INavigationContextProvider)sender;
INavigationContext navigationContext = (INavigationContext)navigationContextProvider.CurrentContext;
// Find selected node node
ObjectExplorerService objectExplorer = (ObjectExplorerService)ServiceCache.ServiceProvider.GetService(typeof(IObjectExplorerService));
INodeInformation node = objectExplorer.FindNode(navigationContext.Context);
debug_message(string.Format("ObjectExplorerContext_CurrentContextChanged::Selected Node {0}",navigationContext.Context));
// Code to add extra items to the menu
if (_tableMenu == null && _tableRegex.IsMatch(node.Context))
{
_tableMenu = (HierarchyObject)node.GetService(typeof(IMenuHandler));
tableMenuItem item = new tableMenuItem();
_tableMenu.AddChild(string.Empty, item);
}
}
catch (Exception ObjectExplorerContextException)
{
debug_message(String.Format("ObjectExplorerContext_CurrentContextChanged::ERROR:{0}", ObjectExplorerContextException.Message));
}
}
如果我在没有额外按钮的情况下单击右键。如果我再次单击按钮,则会添加两次。在调试时我发现代码执行了两次。(我认为该方法是异步调用的。)
不幸的是,关于创建 SSMS 插件的文章并不多,这就是为什么我无法通过谷歌搜索找到解决方案的原因。
有人可以帮我解决这个问题吗?