2016-03-05 77 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

不,我只是想創建「奇才」,以跨多個項目生成多個項目。我不認爲我需要強積金 –