1

我正在尝试为 C++ 项目的自定义构建配置添加一个属性。我希望属性组合框显示可以在代码中设置的值的动态列表。我认为这应该使用 DynamicEnumProperty 类型来完成,但我不确定它的实现。在此之前有没有人使用过这个属性可以为我指明正确的方向?

谢谢

4

2 回答 2

0

我知道这是一个有点老的问题......但你可能仍然喜欢这个解决方案;)

除了引用程序集并通过 MEF 导出所需的类型,如 Dmitry 上面解释的那样,您还需要将 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 ,因此只需放置链接以供将来参考。

于 2015-03-27T00:17:51.913 回答
0

在您的VSPackage(或它引用的任何 MEF 公开的 DLL)中创建一个实现类IDynamicEnumValuesProvider并添加[Export(typeof(IDynamicEnumValuesProvider)), DynamicEnumCategory("MyCategory")]到该类的属性。然后添加EnumProvider="MyCategory"DynamicEnumProperty定义中,您的类将用作值提供者。

确保您的包引用Microsoft.VisualStudio.ProjectSystem.Utilities.v12.0.dllMicrosoft.VisualStudio.ProjectSystem.V12Only.dll(对于 VS2013)或早期版本的类似程序集。

于 2014-02-26T14:24:55.137 回答