使用Roslyn

时间:2017-06-13 11:34:01

标签: c# code-generation roslyn vspackage

有没有办法在Roslyn(也没有roslyn)的特定点添加代码?这是我的问题:我开发了一个在上下文菜单中添加命令的vspackage(在CODE WINDOW中)。当我右键单击并选择此命令时,它应该在该点添加一些代码。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你必须:

  • 收到visual studio的当前文本窗口
  • 获取文本缓冲区中的位置(单击鼠标右键将设置插入位置)
  • 插入文字

首先要做的事情;收到文字视图:

public static IWpfTextView GetCurrentTextView(Package package)
{
    try
    {
        var serviceProvider = package as IServiceProvider;
        IVsTextManager textManager = (IVsTextManager)serviceProvider.GetService(typeof(SVsTextManager));

        IVsTextView textView;
        textManager.GetActiveView(1, null, out textView);

        IComponentModel componentModel = (IComponentModel)serviceProvider.GetService(typeof(SComponentModel));
        var factoryService = componentModel.GetService<IVsEditorAdaptersFactoryService>();

        return factoryService.GetWpfTextView(textView);
    }
    catch
    {
        return null;
    }
}

从中获取插入位置并插入文字:

IWpfTextView textView = GetCurrentTextView(package);
SnapshotPoint caretPosition = textView.Caret.Position.BufferPosition;
textView.TextBuffer.Insert(caretPosition, "HELLO WORLD");

不要忘记添加错误处理。