2012-10-15 445 views
6

我正在爲Visual Studio編寫自定義編輯器。我已經爲新語言實現了一些基本功能,例如語法突出顯示,並通過使用生成的.vsix文件成功安裝了該軟件包。所有的作品都很好,但是我的自定義編輯器需要能夠與不同的文件擴展名關聯。將自定義編輯器添加到Visual Studio編輯器列表

我想,錯了,是因爲我安裝了編輯器,將下出現

工具 - >選項..->文本編輯器 - >文件擴展 - >編輯列表:

enter image description here

但它並沒有出現在那裏。所以問題是:如何將自定義編輯器添加到此列表中?

感謝您的幫助!

回答

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的編輯器列表中看到您的編輯器。

當文件映射正確時,將調用編輯器。

希望這篇文章可以節省大量的時間,他人..

+0

如果只有甲骨文會得到他們的ODT團隊實施此爲他們的編輯器 – Jay

相關問題