MEF (Managed Extensibility Framework)は、Visual Studio などのプログラムを拡張するための .NET での一般的なプログラミング アプローチです。VS パッケージ/拡張機能は、MPF クラスの代わりに新しい VS-MEF クラス (コントラクト) を使用できます。[Export]
MEF は、属性で装飾されたクラスによって認識されます。一般に、色付け可能なアイテムのような特定のクラスを継承し、それを Visual Studio にエクスポートすると、MEF パッケージ内のすべてのエクスポートが検索されてインポートされます。
MPF (マネージド パッケージ フレームワーク)は、非マネージド/ネイティブ VS 拡張モデルの古い COM ラッパーのクラス システムのようなものです。サービスを取得して MPF クラスのメソッドを実装することにより、Visual Studio をプログラムで拡張します (MPF クラスは、VS の COM ラッパーの COM に似たインターフェイスをLanguageService
実装IVsLanguageInfo
します。LanguageService
実装クラスでオーバーライドできるインターフェイス)。
完全なプログラミング言語を実装する場合は、MPF と MEF を組み合わせます。トークン化 (構文の強調表示に必要)、アウトライン、ブレース マッチングなどのエディター部分には MEF を使用し、新しいツール ウィンドウ、プロパティ ページなどの他の VS 要素には MPF を使用します。
MPF の代わりに、古い COM ラッパーを使用することもできますが、MPF クラスは、COM ラッパーを選択した場合に対処しなければならない COM 処理を既に実行しています。
MPFでトークナイザーなどを実装することもできますが、試してみたところ、MEFよりもはるかに直感的ではありません。あなたが私に尋ねると、それはMEFよりもはるかに難しく、より多くの脳損傷を必要としますが、MPFで得たほどMEFで得られたものはまだありません.
気が付いたようにMSDNはMEFとMPFの記事を混同しているので、私自身は少し混乱しています。MSDN のどのサブセクションに移動するかを注意深く監視する必要があります。誤って MEF カテゴリから MPF に簡単に切り替えることができます。ただし、 MSDNは、VS の拡張に関するいくつかの一般的な記事で、何が何であるかについてヒントを与えています。