【问题标题】:Add code in specific point with Roslyn使用 Roslyn 在特定点添加代码
【发布时间】:2017-11-15 03:58:40
【问题描述】:

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

【问题讨论】:

  • 您寻求帮助已经有一段时间了,但我很好奇;我下面的解决方案对你有用吗?

标签: c# code-generation roslyn vspackage


【解决方案1】:

你必须:

  • 接收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");

别忘了添加错误处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多