2012-10-15 12 views
6

Jestem w trakcie pisania niestandardowego edytora do wizualnego studio. Zaimplementowałem kilka podstawowych funkcji dla nowego języka, np. Podświetlanie składni i pomyślnie zainstalowałem pakiet za pomocą wygenerowanego pliku .vsix. Wszystko działa po prostu dobrze, jednak mój edytor niestandardowy musi być w stanie być powiązany z różnymi rozszerzeniami plików.Dodawanie edytora niestandardowego do listy edytora wizualnego studio

Myślałem, błędnie, że odkąd zainstalowany edytor wydaje się pod

Narzędzia-> Opcje ..-> Tekst redaktora> Plik Extension- listy> Redakcja:

enter image description here

Jednak tam się nie pojawia. Pytanie brzmi: jak dodać niestandardowego edytora do tej listy?

Dzięki za pomoc!

Odpowiedz

8

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 ..

+0

Jeśli tylko Oracle dostanie ich zespołu ODT zaimplementować to dla ich edytora – Jay

Powiązane problemy