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

Accessing custom project flavor property stored in .csproj file

好的,所以我成功地创建了带有自定义 属性 页面的自定义项目风格。一切正常,值被保存到 .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>

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

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

如果你可以访问项目节点实例(如果你的项目系统是基于MPF),你可以直接使用ProjectNode[=17]的GetProjectProperty方法=].它获得一个 ProjectPropertyInstance 和 returns 它的评估值,或者 null 如果 属性 不存在。

好的,我明白了。

作为创建自定义项目风格的一部分,您继承自 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 参考来查找我的自定义配置提供程序。