您好,我有一个托管包,它为自定义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 类型