我需要以编程从含有在几乎150个项目中的溶液中提取信息。 该解决方案的文件是不平坦的,所以有些项目被组织成文件夹,文件夹层次结构可以更加级深。 这符合一个递归解决方案:我可以写一个函数,枚举列表,如果该元素是一个项目,它会检查它,如果它是一个文件夹,它会进入该文件夹,递归调用自身来检查该文件夹的内容。 它的主要内容:
$dte = [System.Runtime.InteropServices.Marshal]::GetActiveObject("visualstudio.dte.11.0")
function traverseproject {
param([object]$prjnode, [int]$level)
if ($prjnode.Kind -eq "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}")
{
Write $prjnode.Name
Write $level
}
if ($prjnode.Kind -eq "{66A26720-8FB5-11D2-AA7E-00C04F688DDE}")
{
foreach ($prjsubnode in $prjnode)
{
traverseproject($prjsubnode, $level + 1)
}
}
}
foreach($prjn in $dte.solution.projects)
{
traverseproject($prjn, 0)
}
问题是,$ prjnode对象怎么办递归函数得到的是怪异。 Write $prjnode.Name
不输出任何东西。 可能是出于同样的原因,我无法通过文件夹对象的节点进行迭代。 在代码现在上面是foreach ($prjsubnode in $prjnode)
只是没有做任何事情默默。 我想foreach ($prjsubnode in $prjnode.ProjectItems)
给出错误。 我想任何一种组合。
从错误消息似乎$prjnode
是一个类型DTE
ProjectItem
链接 , 8E2F1269-185E-43C7-8899-950AD2769CCF
。 我可以打印出Count
财产,似乎有效,但我没有看到的界面,哪儿能找到所包含元素的保持上的任何财产。 因此,也许这就是为什么我不能遍历? 不可能? 我看到的Visual Basic例子在MSDN网页我联系的底部,但我需要一个工作PowerShell的解决方案。
该函数的第一次调用似乎工作确定,例如,它看到$prjnode.Kind
财产,但第一个递归调用的东西丢失了。