2016-07-07 6 views
1

拡張機能を記述するための新機能です。私はMSDNサイトでかなり読んだことがあるだけでなく、多くの失敗したGoogle検索を行った。単一言語用の重複したVisual Studio Extension

私の目標は、サードパーティによって作成された言語のサポートを改善するために、Visual Studio拡張機能(MEFとMPFを使用して)を書くことです。第三者にはすでにVS拡張機能があり、デバッグだけでなくIntellisenseも最小限に抑えられ、カラー化も可能です。私はデバッグサポートを失いたくはありませんが、私は経験のあらゆる面を改善したいと思います。

私の理解から、特定の言語(コンテンツタイプ)は、MEF(colorizing、intellisenseなど)を介して1つのLanguageServiceおよび/またはEditorサービスのセットによってのみサポートされます。これは正しいです?既存のIntellisenseを置き換えて、他の機能を追加することは可能ですか?

+0

サイドノート:良い.NETデコンパイラ(私はdotPeekが好きです)は、VS拡張機能を使って作業するときは親友です。 VSの良いチャンクはマネージコードで書かれており、あなたが話すサードパーティのものはもちろんのこと、もっと不明瞭な内部動作を理解するために逆コンパイルすることもできます。 – Cameron

答えて

0

はい、少し努力すれば、言語サービスの登録をバイパスして、同じファイル拡張子に自分自身を登録することができます。言語サービスは、デバッグエンジンとはまったく独立しています(設計時にブレークポイントの配置などいくつかの小さなサービスが言語サービスオブジェクトの一部を通過するため、ほとんどそうですが、あまり重要ではありません)。

あなたの言語サービスを完全にあなたのものに完全に置き換えることをお勧めします。特に、ソースにアクセスして変更を加えなくても、言語サービスを壊さずに機能を強化しようとするよりも簡単です。

ほとんどの登録は、レジストリ内のエントリを介してバインドされています。 HKCU\Software\Microsoft\VisualStudio\14.0_Config\。これはではありません MEFコンポーネントには当てはまりますが、MEFコンポーネントは言語サービスによって定義されるコンテンツタイプによってフィルタリングされる傾向があります。したがって、言語サービスで異なるコンテンツタイプを定義し、それに物事。

言語サービスを同じファイル拡張子に登録できますが、優先度は高くなります(言語サービスパッケージのProvideEditorExtension属性を使用)。それでは、あなたの言葉遣いはあなたの言語サービスに任されています。あなた自身のものではないコンテンツタイプで動作している限り、あなたは彼らのことを心配する必要はありません。

最後に、幸運!

+0

フォローアップの質問がある場合は、[vsix]質問タグを頻繁に参照しないため、コメントにリンクを追加してください;-) – Cameron

+0

Thanks @Cameron。これまでのところ、MEFコンポーネントを使用する場合、LanguageServiceはまったく必要ないと思われます。それらは重複しているように見え、私はLanguageServiceに追加の機能を見ませんでした。私はそれについて訂正するのですか、私は何かを逃しましたか?これはおそらく別の質問ですが、あなたは私のOPに答えました。 –

+0

右のMEFは言語サービスの登録とは直交していますが、言語サービスに必要なサービスの多くはMEFコンポーネント(例:構文の強調表示、補完など)を介して公開されています。ほとんどのMEFコンポーネントは、特定のコンテンツタイプ(そのコンテンツタイプを定義する言語サービス)との間のリンクで登録されています。言語サービス自体はあまり効果がありません。それは重い持ち上げを行うコンテンツタイプにフックする他のすべてです。遅い応答時間に申し訳ありません! – Cameron

関連する問題