我想创建一个VS扩展名,在其中我需要知道菜单被调用的行号。我找到了带有宏的VisualBasic implementation,它似乎可以执行此操作,但是我不知道如何在C#中启动它。目的是知道调用ContextMenu
在其上放置一个占位符图标的行的确切编号,就像断点一样。感谢您提供有用的链接,因为我在该主题上找不到太多。
最佳答案
您可以创建一个VSIX项目,并在项目中添加一个Command项。然后在MenuItemCallback()方法中添加以下代码以获取代码行号。
private void MenuItemCallback(object sender, EventArgs e)
{
EnvDTE.DTE dte = (EnvDTE.DTE)this.ServiceProvider.GetService(typeof(EnvDTE.DTE));
EnvDTE.TextSelection ts = dte.ActiveWindow.Selection as EnvDTE.TextSelection;
if (ts == null)
return;
EnvDTE.CodeFunction func = ts.ActivePoint.CodeElement[vsCMElement.vsCMElementFunction]
as EnvDTE.CodeFunction;
if (func == null)
return;
string message = dte.ActiveWindow.Document.FullName + System.Environment.NewLine +
"Line " + ts.CurrentLine + System.Environment.NewLine +
func.FullName;
string title = "GetLineNo";
VsShellUtilities.ShowMessageBox(
this.ServiceProvider,
message,
title,
OLEMSGICON.OLEMSGICON_INFO,
OLEMSGBUTTON.OLEMSGBUTTON_OK,
OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST);
}