C# Mac扩展的VS-ActiveWindow中的空编辑器

C# Mac扩展的VS-ActiveWindow中的空编辑器,c#,monodevelop,visual-studio-mac,C#,Monodevelop,Visual Studio Mac,我正在尝试为Visual Studio for Mac开发一个扩展。我正在使用教程。在我试着运行分机之前,一切都很顺利。在我的情况下,“编辑”子菜单中的“插入日期”被禁用。调试时,我注意到尽管我有一个打开的文档,但IdeApp.Workbench.ActiveDocument.Editor是空的。这是我的密码 using System; using MonoDevelop.Components.Commands; using MonoDevelop.Ide; namespace Example

我正在尝试为Visual Studio for Mac开发一个扩展。我正在使用教程。在我试着运行分机之前,一切都很顺利。在我的情况下,“编辑”子菜单中的“插入日期”被禁用。调试时,我注意到尽管我有一个打开的文档,但IdeApp.Workbench.ActiveDocument.Editor是空的。这是我的密码

using System;
using MonoDevelop.Components.Commands;
using MonoDevelop.Ide;

namespace ExampleIDEExtension
{
    public class InsertDateHandler : CommandHandler
    {
        protected override void Run()
        {
            var editor = IdeApp.Workbench.ActiveDocument.Editor;
            var currentTime = DateTime.Now.ToString();
            editor.InsertAtCaret(currentTime);
        }

        protected override void Update(CommandInfo info)
        {
            info.Enabled = IdeApp.Workbench.ActiveDocument.Editor != null;
        }
    }
}

我不知道为什么编辑器是空的,尽管有一个打开的文档。

编辑器是空的,因为Monodevelop使用的是Microsoft.VisualStudio.Text.Editor,它在下面的链接中提到API已经过时

无论如何,为了回答您的问题,这就是我必须做的,以实现插入日期处理程序演示插件

    protected override void Run()
    {
        var textBuffer = IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
        var date = DateTime.Now.ToString();
        var textView = IdeApp.Workbench.ActiveDocument.GetContent<ITextView>();
        var caretPosition = textView.Caret.Position;
        textBuffer.Insert(caretPosition.BufferPosition.Position,date);
    }

    protected override void Update(CommandInfo info)
    {
        var textBuffer = IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
        if (textBuffer != null && textBuffer.AsTextContainer() is SourceTextContainer container)
        {
            var document = container.GetTextBuffer();
            if (document != null)
            {
                info.Enabled = true;
            }
        }
    }
受保护的覆盖无效运行()
{
var textBuffer=IdeApp.Workbench.ActiveDocument.GetContent();
var date=DateTime.Now.ToString();
var textView=IdeApp.Workbench.ActiveDocument.GetContent();
var caretPosition=textView.Caret.Position;
textBuffer.Insert(caretPosition.BufferPosition.Position,date);
}
受保护的覆盖无效更新(CommandInfo)
{
var textBuffer=IdeApp.Workbench.ActiveDocument.GetContent();
if(textBuffer!=null&&textBuffer.AsTextContainer()是SourceTextContainer)
{
var document=container.GetTextBuffer();
如果(文档!=null)
{
info.Enabled=true;
}
}
}

为了修饰vin的答案,让其他仍在为Mac Visual Studio创建扩展而苦苦挣扎的人知道,在InsertDateHandler.cs中,它需要如下所示:

using System;
using MonoDevelop.Components.Commands;
using MonoDevelop.Ide;
using Microsoft.VisualStudio.Text;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.CodeAnalysis.Text;

namespace DateInserter
{
    class InsertDateHandler : CommandHandler
    {
        protected override void Run()
        {
            var textBuffer =      IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
        var date = DateTime.Now.ToString();
        var textView = IdeApp.Workbench.ActiveDocument.GetContent<ITextView>();
        var caretPosition = textView.Caret.Position;
        textBuffer.Insert(caretPosition.BufferPosition.Position, date);

    }

        protected override void Update(CommandInfo info)
        {
            var textBuffer =     IdeApp.Workbench.ActiveDocument.GetContent<ITextBuffer>();
            if (textBuffer != null && textBuffer.AsTextContainer() is     SourceTextContainer container)
            {
                var document = container.GetTextBuffer();
                if (document != null)
                {
                    info.Enabled = true;
                }
           }
       }
    }
}
然后通过执行以下操作创建.mpack文件:-

% mono /Applications/"Visual Studio.app"/Contents/Resources/lib/monodevelop/bin/vstool.exe setup pack DateInserter.dll

该代码只能在旧编辑器中使用。对于新编辑,你试过了吗?非常感谢,我也很努力,文档很糟糕,互联网上几乎没有任何帮助。你的答案解决了这个问题,但对于其他人来说,你需要提到使用需要是什么:使用系统;使用MonoDevelop.Components.Commands;使用MonoDevelop.Ide;使用Microsoft.VisualStudio.Text;使用Microsoft.VisualStudio.Text.Editor;使用Microsoft.CodeAnalysis.Text;
% mono /Applications/"Visual Studio.app"/Contents/Resources/lib/monodevelop/bin/vstool.exe setup pack DateInserter.dll