这是一段时间以前发布到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 Tools for VS2008)。在那里,有一个名为“Silverlight Applications”的页面,可以在其上编辑上述属性的内容。
我需要通过VS自动化或低级接口在我的加载项中以编程方式访问它。
答案 0 :(得分:4)
在最新发布的Silverlight Tools for VS 2008 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接口来执行此操作(具体来说,您希望获取用于访问MSBuild属性的IVsBuildPropertyStorage接口)。这是一个代码片段(在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 mentions将DTE对象强制转换为IServiceProvider的方法(因此您可以调用GetService)。
答案 1 :(得分:0)
由于.sln文件只是文本文件,请尝试使用记事本编辑.sln文件。您应该能够在那里找到您要寻找的房产。假设信息是可理解的格式,那么您应该能够使用简单的文本解析器以编程方式从.sln中提取信息。