我正尝试着为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;
}
}
}