Przynajmniej dostałem odznakę kłódki na to pytanie.
Po dużo inżynierii odwrotnej znalazłem rozwiązanie ... który nie jest udokumentowany .. Wszędzie ..
numer Krok 1:
najpierw trzeba utworzyć fabrykę edytor ze wszystkimi dzwonami i gwizdki, z których pochodzi - MSVS ma na to rozszerzenie.
Krok numer 2: Następnie trzeba stworzyć takiej klasy
[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)
{
}
}
Krok 3: Następnie trzeba dodać do tej klasy jako atrybut do swojej fabryki Editor (który został utworzony w kroku 1) :
[ProvideFileExtensionMapping("{E23E32ED-3467-4401-A364-1352666A3502}", "RText Editor", typeof(EditorFactory), GuidList.guidRTextEditorPluginEditorFactoryString, 100)]
public sealed class EditorFactory : IVsEditorFactory, IDisposable{...}
To wszystko. Powinieneś teraz zobaczyć swojego edytora na liście edytorów w visual studio.
Twój edytor będzie wywoływany, gdy mapowanie pliku będzie poprawne.
Mam nadzieję, że ten post oszczędza dużo czasu dla kogoś innego ..
Jeśli tylko Oracle dostanie ich zespołu ODT zaimplementować to dla ich edytora – Jay