2017-01-29 7 views
0

Visual Studioの拡張機能で、MEFコンポーネントをエクスポートして後で検索しようとしています。 OleMenuCommandからのコールバックで解決するVS拡張子の[Export]を持つMEFコンポーネント - 制約に一致するエクスポートが見つかりません

[Export(typeof(IBoilerplateSettings))] 
public class BoilerplateSettings : IBoilerplateSettings 
{ 
    ... 

そして、このコード:

が、私はこのクラスを持っています。 this pull requestの例があります。

var componentModel = (IComponentModel)this.package.GetService(typeof(SComponentModel)); 
var settings = componentModel.DefaultExportProvider.GetExportedValue<IBoilerplateSettings>(); 

しかし、それは毎回このエラーがスローされます。

No exports were found that match the constraint: 
    ContractName UnitTestBoilerplate.IBoilerplateSettings 
    RequiredTypeIdentity UnitTestBoilerplate.IBoilerplateSettings 

はどちらも同じアセンブリです。私はSystem.CompositionSystem.ComponentModel.Compositionの両方で[Export]属性を試しましたが、いずれも動作しません。

私はthe docs for MEF in VSを見ていますが、属性を追加するとちょうどうまくいくはずです。私はまた、ComponentModelキャッシュをクリアしようとしましたが、うまくいきませんでした。私はここで何が欠けていますか?

答えて

0

チェックするために一般的に二つのこと:

  1. は、あなたのプロジェクトがあなたの.vsixmanifest内部MEFコンポーネントとして言及されていることを確認します。そうでない場合、VSはあなたのアセンブリを見ていません。
  2. Visual Studio 2015以降では、ComponentModelCacheフォルダに、MEFコンポジションを作成するときにエラーをリストする.errファイルがあります。気になるものがそこにないことを確認してください。 (普通のことですが...クリーンな状態で出荷するのはいつもベストではありません。)

そして、それがうまくいかない場合、しばしば積極的な方法がありますVisual Studioの実行中にすべての例外を解除し、拡張機能に関連するものが見つかるかどうかを確認します。その他のロード例外やその他の根本原因が見つかります。残念ながら、それは非常に散発的なアプローチです。

+0

私は ' 'の下にあるが、それは助けに見えなかった。 .errファイルは0バイトです。 – RandomEngy

+0

さらに、複数のプロジェクトが同じ.vsixに置かれている場合、そこに適切なプロジェクトがリストされていますか?そうでなければ、それは正しいようです... –

+0

.vsixには1つのプロジェクトしかありません。 – RandomEngy

関連する問題