C++ プロジェクトのカスタム ビルド構成にプロパティを追加しようとしています。プロパティ コンボ ボックスに、コードで設定できる動的な値のリストを表示したいと考えています。これは DynamicEnumProperty タイプを使用して行う必要があると思いますが、その実装についてはわかりません。それが正しい方向に私を向けることができる前に、誰かがこのプロパティで働いたことがありますか?
ありがとう
C++ プロジェクトのカスタム ビルド構成にプロパティを追加しようとしています。プロパティ コンボ ボックスに、コードで設定できる動的な値のリストを表示したいと考えています。これは DynamicEnumProperty タイプを使用して行う必要があると思いますが、その実装についてはわかりません。それが正しい方向に私を向けることができる前に、誰かがこのプロパティで働いたことがありますか?
ありがとう
あなたのVSPackage
(またはそれによって参照される任意の MEF 公開 DLL) で、実装するクラスを作成し、そのクラスの属性にIDynamicEnumValuesProvider
追加します。次に、定義に[Export(typeof(IDynamicEnumValuesProvider)), DynamicEnumCategory("MyCategory")]
追加すると、クラスが値プロバイダーとして使用されます。EnumProvider="MyCategory"
DynamicEnumProperty
パッケージがMicrosoft.VisualStudio.ProjectSystem.Utilities.v12.0.dll
およびMicrosoft.VisualStudio.ProjectSystem.V12Only.dll
(VS2013 の場合) または以前のバージョンの同様のアセンブリを参照していることを確認してください。
私はそれが少し古い質問であることを知っています...しかし、あなたはまだ解決策を楽しむかもしれません;)
上で Dmitry が説明したように、アセンブリを参照し、MEF を介して目的の型をエクスポートするだけでなく、VSPackage を MEF 対応としてマークして、コントラクトをスキャンできるようにする必要もあります。source.extension.vsixmanifest を編集して実行します。
VS2010 の場合:
<Content>
<VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage>
<MefComponent>|%CurrentProject%|</MefComponent>
</Content>
VS2012 / VS2013 の場合:
<Assets>
<Asset Type="Microsoft.VisualStudio.MefComponent" d:Source="Project"
d:ProjectName="%CurrentProject%" Path="|%CurrentProject%|" />
</Assets>
これにより、エクスポートされたクラスに設定されたブレークポイントに到達できるはずです。
さらに、実行時に「手動で」オブジェクトを作成する必要がある場合は、VisualStudio の内部構成コンテナーを使用できます。どこからでもアクセスする最も簡単な方法は次のとおりです。
var container = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(SComponentModel)) as IComponentModel;
var service = container.GetService<SVsXYZ>();
ここにサンプルを簡単に追加します: https://github.com/phofman/vs-plugin、将来の参照用にリンクを配置するだけです。