我正在为visual studio编写自定义编辑器。我已经为新语言实现了一些基本功能,例如语法高亮,我使用生成的.vsix文件成功安装了包。所有工作都很好,但我的自定义编辑器需要能够与不同的文件扩展名相关联。
我错误地想,因为我安装了编辑器,它会出现在
下面工具 - >选项..->文本编辑器 - >文件扩展名 - >编辑器列表:
然而它并没有出现在那里。所以问题是:如何在此列表中添加自定义编辑器?
感谢您的帮助!
答案 0 :(得分:8)
至少我得到了这个问题的风滚草徽章。
经过大量的逆向工程后,我找到了解决方案......没有记录。无处不在..
第1步:
首先,你需要创建一个编辑器工厂,它带有所有的铃声和口哨声 - MSVS有一个扩展名。
第2步: 然后你必须创建这样一个类
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
class ProvideFileExtensionMapping : RegistrationAttribute
{
private readonly string _name, _id, _editorGuid, _package;
private readonly int _sortPriority;
public ProvideFileExtensionMapping(string id, string name, object editorGuid, string package, int sortPriority)
{
_id = id;
_name = name;
if (editorGuid is Type)
{
_editorGuid = ((Type)editorGuid).GUID.ToString("B");
}
else
{
_editorGuid = editorGuid.ToString();
}
_package = package;
_sortPriority = sortPriority;
}
public override void Register(RegistrationContext context)
{
using (Key mappingKey = context.CreateKey("FileExtensionMapping\\" + _id))
{
mappingKey.SetValue("", _name);
mappingKey.SetValue("DisplayName", _name);
mappingKey.SetValue("EditorGuid", _editorGuid);
mappingKey.SetValue("Package", _package);
mappingKey.SetValue("SortPriority", _sortPriority);
}
}
public override void Unregister(RegistrationAttribute.RegistrationContext context)
{
}
}
第3步: 然后,您需要将此类作为属性添加到编辑器工厂(您在步骤1中创建):
[ProvideFileExtensionMapping("{E23E32ED-3467-4401-A364-1352666A3502}", "RText Editor", typeof(EditorFactory), GuidList.guidRTextEditorPluginEditorFactoryString, 100)]
public sealed class EditorFactory : IVsEditorFactory, IDisposable{...}
就是这样。您现在应该可以在visual studio的编辑器列表中看到您的编辑器。
当文件映射正确时,应调用您的编辑器。
希望这篇文章为其他人节省了大量时间..