我想创建一个Visual Studio插件,它可以识别插入符号当前是否在方法,类或命名空间块中,即如果插入符移动,插件应该能够记下插入符号当前的状态在某某内部。
如果这可以扩展到用花括号括起来的任何C#块,例如属性,这将是非常好的。
虽然我已经检查了类似的问题,但如果这是一个重复的问题,请告诉我,以便我可以相应地进行标记。如果其他与VS Addin相关的问题在这里显然有用,请告诉我。
基本上,我想知道我们可以使用哪些技术以及如何实现这些技术。
编辑:我想开始的简短回答是:
答案 0 :(得分:0)
实际上,我认为您需要做的第一件事就是判断班级中有多少种方法或属性,以及它们的位置。获得这些信息后。您需要做的下一步是判断当前光标位置是什么。然后,您可以与您获得的那些方法信息进行比较。到目前为止,您可以获得光标所在的方法。这是我找到的球场解决方案。
让我们谈谈一些技术细节:
1.如何获得方法和属性的位置?
您可以使用NRefacotry或CSParser执行此操作(我使用NRefactory完成我的要求)
2.如何获得光标位置?
在IVsTextView中有一个名为“GetCaretPos”的方法。您可以通过TextManager获取ActiveTextView。然后你可以使用“GetCaretPos”方法。以下是一些代码可能会对您有所帮助。
public static IVsTextManager TextManager
{
get
{
if (textManager == null)
{
Object obj = Package.GetGlobalService(typeof(SVsTextManager));
if (obj == null)
{
throw new ArgumentException("get textmanager failed in VSTextView");
}
textManager = obj as IVsTextManager;
}
return textManager;
}
}
public static IVsTextView ActiveTextView
{
get
{
IVsTextView activeView = null;
if (TextManager != null)
{
TextManager.GetActiveView(1, activeTextBuffer, out activeView);
}
return activeView;
}
}