2012-10-15 7 views
6

Ich schreibe gerade einen benutzerdefinierten Editor für Visual Studio. Ich habe einige Grundfunktionen für die neue Sprache implementiert, z. Syntaxhervorhebung und ich habe das Paket mit der generierten .vsix-Datei erfolgreich installiert. Alles funktioniert nur gut, aber mein benutzerdefinierter Editor muss mit verschiedenen Dateierweiterungen verknüpft werden können.Hinzufügen eines benutzerdefinierten Editors zur Visual Studio Editor-Liste

Ich dachte, fälschlicherweise, dass, da ich den Editor installiert es unter

Tools- erscheinen würde> Optionen ..-> Text Editor-> Extension-> Herausgeber Dateiliste:

enter image description here

Allerdings erscheint es dort nicht. Die Frage ist also: Wie fügen Sie einen benutzerdefinierten Editor zu dieser Liste hinzu?

Danke für jede Hilfe!

Antwort

8

Nun, zumindest habe ich das Tumbleweed-Abzeichen für diese Frage bekommen.

Nach viel Reverse Engineering ich die Lösung gefunden ..., die nicht dokumentiert ist .. Überall ..

Schritt Nummer 1:

Zuerst müssen Sie einen Editor Fabrik mit allen Glocken erstellen und pfeift es kommt - MSVS hat eine Erweiterung dafür.

Schritt Nummer 2: Dann haben Sie eine solche Klasse erstellen

[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) 
     { 
     } 
    } 

Schritt 3: Dann müssen Sie diese Klasse als Attribut Editor Fabrik hinzuzufügen (die Sie in Schritt 1) :

[ProvideFileExtensionMapping("{E23E32ED-3467-4401-A364-1352666A3502}", "RText Editor", typeof(EditorFactory), GuidList.guidRTextEditorPluginEditorFactoryString, 100)] 
public sealed class EditorFactory : IVsEditorFactory, IDisposable{...} 

Das ist es. Sie sollten nun Ihren Editor in der Liste der Editoren in Visual Studio sehen können.

Ihr Editor soll aufgerufen werden, wenn die Dateizuordnung korrekt ist.

Hoffentlich Post spart viel Zeit für jemand anderes ..

+0

Wenn nur Oracle würde ihre ODT-Team erhalten Sie dieses für ihre Editor zu implementieren – Jay