【问题标题】:Accessing custom project flavor property stored in .csproj file访问存储在 .csproj 文件中的自定义项目风味属性
【发布时间】:2016-03-05 13:09:15
【问题描述】:

好的,所以我已经设法使用自定义属性页创建了自定义项目风格。一切正常,值被保存到 .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>

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

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

【问题讨论】:

    标签: visual-studio-extensions vsix vsx


    【解决方案1】:

    好的,我想通了。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我正在使用 Visual Studio 2015 和 VS SDK。我似乎找不到 ProjectNode 类。 MPF 是位于 SDK 之上的另一个库吗?我还是 VSIX 的新手——感觉就像我在黑暗中蹒跚而行 :)
      • MPFManaged Package Framework的缩写;它在 SDK 之上实现,请参阅:msdn.microsoft.com/en-us/library/… 您的扩展是否提供自定义语言服务?如果不是,MPF 可能不适合与之合作......
      • 不,我只想创建“向导”以跨多个项目生成多个项目项。我认为我不需要强积金
      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      相关资源
      最近更新 更多