Recursively traversing a Visual Studio Solution using PowerShell
我需要以编程方式从包含近150个项目的解决方案中提取信息。解决方案文件不是很平坦,因此某些项目被组织到文件夹中,文件夹层次结构可以更深入。
这适合递归解决方案:我可以编写一个枚举列表的函数,如果元素是项目,则它将对其进行检查;如果它是文件夹,则它将进入该文件夹并递归调用自身以检查该文件夹的内容。要点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | $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对象很奇怪。
从错误消息看来,
该函数的第一次调用似乎可以正常工作,例如,它看到了
由于您已经在加载dte,请访问http://studioshell.codeplex.com/
为您提供最大帮助的功能:
- 以一致且可发现的方式管理项目,引用,断点,堆栈局部变量,菜单,工具栏,Visual Studio设置,IDE窗口,甚至可以从PowerShell脚本管理代码。
这是使用StudioShell获取所有已加载项目的方法
1 2 |
请注意,大型解决方案最多可能需要15分钟。