Расширяемость Visual Studio (надстройка): как получить доступ к свойствам, связанным с Silverlight? - PullRequest
2 голосов
/ 23 апреля 2009

Это вопрос, который был опубликован на форумах MSDN некоторое время назад и оставался без ответа по сей день:

http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/676b13d4-acfc-4252-b102-5fc0553e4b81/

Меня интересует свойство ProjOutputReferences, хранящееся в файле решения Visual Studio (.sln).

В Visual Studio это свойство доступно через диалоговое окно «Страницы свойств» проекта Silverlight WebSite (требуется наличие инструментов Silverlight для VS2008). Там есть страница «Приложения Silverlight», на которой можно редактировать содержимое вышеупомянутого свойства.

Мне нужен программный доступ к нему внутри моей надстройки, через автоматизацию VS или низкоуровневый интерфейс (ы).

Ответы [ 2 ]

4 голосов
/ 28 мая 2009

В последней выпущенной версии Silverlight Tools для VS 2008 с пакетом обновления 1 (SP1) список сохраняется в свойстве SilverlightApplicationList в соответствующем файле проекта. Например, в моем решении есть SilverlightApplication2 и SilverlightApplication2.Web (последний ссылается на первый). У меня есть следующий узел в моем файле SilverlightApplication2.Web.csproj:

<SilverlightApplicationList>{BBA7B148-42AE-477E-BB5E-0BA5AEC0A467}|..\SilverlightApplication2\SilverlightApplication2.csproj|ClientBin|False</SilverlightApplicationList>

В действительности нет способа получить доступ к этому свойству через чисто DTE, но вы можете использовать для этого интерфейсы Visual Studio SDK / VSIP (в частности, вы хотите получить интерфейс IVsBuildPropertyStorage для доступа к свойствам MSBuild). Вот фрагмент кода (запускается в обработчике команд меню в VSPackage):

IVsSolution solution = GetService(typeof(SVsSolution)) as IVsSolution;

IVsHierarchy hierarchy;
solution.GetProjectOfUniqueName(@"SilverlightApplication2.Web\SilverlightApplication2.Web.csproj", out hierarchy);

IVsBuildPropertyStorage buildPropertyStorage = hierarchy as IVsBuildPropertyStorage;

if (buildPropertyStorage != null)
{
    string silverlightAppListValue;
    buildPropertyStorage.GetPropertyValue("SilverlightApplicationList", "Debug", (uint)_PersistStorageType.PST_PROJECT_FILE, out silverlightAppListValue);

    MessageBox.Show(silverlightAppListValue);
}

Если вы все еще хотите попробовать сделать это с помощью надстройки, вам нужно будет придерживаться подхода, который Крейг упоминает , чтобы привести объект DTE к IServiceProvider (чтобы вы могли вызвать GetService).

- Аарон Мартен

0 голосов
/ 02 июля 2009

Поскольку файлы .sln - это просто текстовые файлы, попробуйте отредактировать файл .sln с помощью Блокнота. Вы должны быть в состоянии найти недвижимость, которую вы ищете, перечисленные там. Предполагая, что информация представлена ​​в понятном формате, вы сможете использовать простой текстовый анализатор для программного извлечения информации из .sln.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...