DynamicEnumProperty 提供程序类,用于实现 Visual Studio 2013 未加载的 IDyna



您好,我有一个托管包,它为自定义C++构建工具链提供代码。我有一个自定义平台 Toolset.targets 加载一些自定义属性:

<ItemGroup>
    <PropertyPageSchema Include="$(MSBuildThisFileDirectory)projprops.xml" />
</ItemGroup>

项目.xml如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Rule Name="MyGeneralProperties"
  Order="9"
  DisplayName="MyRule"
  Description="General"
  PageTemplate="generic"
  xmlns="http://schemas.microsoft.com/build/2009/properties">
    <Rule.Categories>
        <Category Name="General" DisplayName="General" Description="General" />
    </Rule.Categories>
    <Rule.DataSource>
        <DataSource Persistence="UserFile"/>
    </Rule.DataSource>
    <DynamicEnumProperty Name="BuildMachine" DisplayName="Build Machine" Category="General" EnumProvider="BuildMachines" Visible="True" Description="The machine that building and debugging will take place on."/>
</Rule>

我的枚举提供程序与包位于同一 DLL 中,如下所示:

[Export(typeof(IDynamicEnumValuesProvider))]
[DynamicEnumCategory("BuildMachines")]
public class BuildMachineEnumProvider : IDynamicEnumValuesProvider
{
    // the implementation
}

运行时永远不会创建BuildMachineEnumProvider实例,但该属性会显示在 VC 项目属性中应有的位置。当通过 [ProvideAutoLoad(UIContextGuids80.SolutionExists)] 加载解决方案时,包将按预期加载。根据我读过的所有内容,MEF 应该在加载包时识别我的枚举提供程序类,其他一切都应该正常工作 - 除了它没有。

您需要

将VSPackage标记为启用MEF。

在此处查看详细信息: 有谁知道如何为C++项目属性规则实现 DynamicEnumProperty 类型

最新更新