2

这是前段时间在 MSDN 论坛上发布的问题,直到今天仍未得到解答:

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

我感兴趣的属性是 ProjOutputReferences,存储在 Visual Studio 解决方案 (.sln) 文件中。

在 Visual Studio 中,可通过 Silverlight 网站项目的“属性页”对话框访问此属性(要求您安装了适用于 VS2008 的 Silverlight 工具)。在那里,有一个名为“Silverlight Applications”的页面,可以在其中编辑上述属性的内容。

我需要通过 VS 自动化或低级接口以编程方式在我的加载项中访问它。

4

2 回答 2

4

在用于 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)。

-亚伦马丁

于 2009-05-28T16:53:36.733 回答
0

由于 .sln 文件只是文本文件,请尝试使用记事本编辑 .sln 文件。您应该能够在那里找到您正在寻找的房产。假设信息的格式可以理解,那么您应该能够使用简单的文本解析器以编程方式从 .sln 中提取信息。

于 2009-07-01T20:56:47.800 回答