在用于 VS 2008 SP1 的 Silverlight 工具的最新发布版本中,该列表保留在引用项目文件的 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);
}
如果您仍想尝试从 Addin 执行此操作,则必须遵循Craig 提到的方法将 DTE 对象转换为 IServiceProvider(以便您可以调用 GetService)。
-亚伦马丁