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

То, что я не могу показаться, чтобы выяснить, как открыть пользовательское свойство, скажем, в пункте меню обратного вызова в моем пакете. Я могу получить проект, выбранный элемент в обозревателе решений, который был правой щелкнул принадлежит, но я застрял после этого ...

Любая помощь будет оценена Thanx Hein

ответ

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 посмотреть мой собственный configu поставщик рациона.

0

Если вы можете получить доступ к экземпляру узла проекта (и если ваша система проекта основана на MPF), вы можете просто использовать метод GetProjectProperty класса ProjectNode. Он получает 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

Нет, я просто хочу создать «Мастера» для создания нескольких элементов проекта в нескольких проектах. Я не думаю, что мне понадобится MPF –