2016-03-05 137 views
0

好的,所以我设法用自定义属性页面创建了自定义项目风格。的所有作品,和值被保存到文件的.csproj像这样:访问存储在.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> 

我似乎无法弄清楚是如何,比如说,从菜单项的回调访问此自定义属性在我的包里。我可以在Solution Explorer中选择项目这是正确的点击所属的项目,但我之后卡住......

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

回答

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引用来查找我的自定义配置配给提供者。

0

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

+0

我正在使用Visual Studio 2015和VS SDK。我似乎无法找到一个ProjectNode类。 MPF是另一个位于SDK顶部的库吗?我在VSIX方面还很新 - 感觉就像我在黑暗中徘徊:) –

+0

'MPF'是'Managed Package Framework'的缩写;它在SDK之上实现,请参阅:https://msdn.microsoft.com/en-us/library/bb166360.aspx?f=255&MSPPError=-2147217396您的扩展是否提供了自定义语言服务?如果没有,MPF可能不是理想的工作... – Matze

+0

不,我只是想创建“奇才”,以跨多个项目生成多个项目。我不认为我需要强积金 –

相关问题