访问存储在.csproj文件中的自定义项目flavor属性

时间:2016-03-05 13:09:16

标签: visual-studio-extensions vsix vsx

好的,所以我设法使用自定义属性页创建自定义项目风格。一切正常,值将被保存到.csproj文件中,如下所示:

    <ProjectExtensions>
<VisualStudio>
  <FlavorProperties GUID="{880389B4-B814-4796-844B-F0E1678C31D1}" Configuration="Debug|Any CPU">
    <ServiceLibraryProjectFlavorCfg>
      <BooleanProperty>True</BooleanProperty>
    </ServiceLibraryProjectFlavorCfg>
  </FlavorProperties>
  <FlavorProperties GUID="{880389B4-B814-4796-844B-F0E1678C31D1}" Configuration="Release|Any CPU">
    <ServiceLibraryProjectFlavorCfg />
  </FlavorProperties>
</VisualStudio>

我似乎无法弄清楚如何从我的包中的菜单项回调中访问此自定义属性。我可以得到右键单击解决方案资源管理器中所选项目所属的项目,但之后我就被卡住了......

任何帮助将不胜感激 感谢名单 海因

2 个答案:

答案 0 :(得分:2)

好的,我明白了。

作为创建自定义项目风格的一部分,您从FlavoredProjectBase继承并实现IVsProjectFlavorCfgProvider接口。

IVsProjectFlavorCfgProvider有一个可实现的方法

int CreateProjectFlavorCfg(IVsCfg pBaseProjectCfg, out IVsProjectFlavorCfg ppFlavorCfg)

所以在这里我实现了我的自定义IVsProjectFlavorCfg和指定的IVsCfg之间的静态映射

已经有一个EnvDTE.Project引用,我可以使用以下内容来获取IVsCfg引用:

IVsHierarchy hierarchy1 = null;
var sol = Package.GetGlobalService(typeof(SVsSolution)) as IVsSolution;
sol.GetProjectOfUniqueName(project.UniqueName, out hierarchy1);

IVsSolutionBuildManager bm = Package.GetGlobalService(typeof(IVsSolutionBuildManager)) as IVsSolutionBuildManager;

IVsProjectCfg[] cfgs = new IVsProjectCfg[1];
bm.FindActiveProjectCfg(IntPtr.Zero, IntPtr.Zero, hierarchy1, cfgs);

IVsCfg cfg = cfgs[0] as IVsCfg;

然后我可以使用IVsCfg引用来查找我的自定义配置提供程序。

答案 1 :(得分:0)

如果您可以访问项目节点实例(如果您的项目系统基于MPF),则可以使用GetProjectProperty类的ProjectNode方法。它获取ProjectPropertyInstance并返回其评估值,如果该属性不存在,则返回null