VSIXプロジェクトを作成し、プロジェクトにコマンド項目を追加することができます。その後、次のコードを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);
}
はhttps://stackoverflow.com/questions/32502847/is-there-any-extension-for-vs-copying-code-position –
あなたがこれを使用する方法についての例を提供することができますか? EnvDTE.TextSelection ts = DTE.ActiveWindow.SelectionとしてEnvDTE.TextSelectionとして実際に提供されているこの例の最初の行は、エラーが表示されます: \t _静的でないフィールドのメソッドにはオブジェクト参照が必要です、またはプロパティ '_DTE.ActiveWindow' _。 – rTECH
DTEオブジェクトを取得する方法については、https://stackoverflow.com/questions/19087186/how-to-acquire-dte-object-instance-in-a-vs-package-project –