В последней выпущенной версии 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).
- Аарон Мартен