6

Visual Studio 用のカスタム エディターを作成中です。構文の強調表示など、新しい言語の基本的な機能をいくつか実装し、生成された .vsix ファイルを使用してパッケージを正常にインストールしました。すべてうまく機能しますが、私のカスタム エディターはさまざまなファイル拡張子に関連付けることができる必要があります。

誤って、エディターをインストールしたので、下に表示されると思いました

Tools->Options..->Text Editor->File Extension->Editors list:

ここに画像の説明を入力

しかし、そこには現れません。問題は、このリストにカスタム エディターを追加するにはどうすればよいかということです。

助けてくれてありがとう!

4

1 に答える 1

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

それでおしまい。これで、ビジュアル スタジオのエディターのリストにエディターが表示されるはずです。

ファイルのマッピングが正しい場合、エディタが呼び出されます。

うまくいけば、この投稿は他の誰かのために多くの時間を節約します..

于 2012-10-26T05:42:22.943 に答える