访问存储在 .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 参考来查找我的自定义配置提供程序。
好的,所以我成功地创建了带有自定义 属性 页面的自定义项目风格。一切正常,值被保存到 .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 参考来查找我的自定义配置提供程序。