谢谢,里德;您链接的文章让我足够深入,可以在几分钟内完成概念验证。
因为我觉得它是相关的,所以这里是我收集 ProjectItems 的迭代和递归方式。我在 DXCore 中这样做了,但同样的想法也适用于原始的 Visual Studio SDK(DXCore 只是 SDK 的一个更好看的包装器)。“解决方案”、“项目”、“项目”和“项目项目”对象就在 EnvDTE 中。
设置项目
EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;
迭代项目以提取 ProjectItems
var projects = myProjects.GetEnumerator();
while (projects.MoveNext())
{
var items = ((Project)projects.Current).ProjectItems.GetEnumerator();
while (items.MoveNext())
{
var item = (ProjectItem)items.Current;
//Recursion to get all ProjectItems
projectItems.Add(GetFiles(item));
}
}
最后,我为在活动解决方案中获取所有 ProjectItems 所做的递归
ProjectItem GetFiles(ProjectItem item)
{
//base case
if (item.ProjectItems == null)
return item;
var items = item.ProjectItems.GetEnumerator();
while (items.MoveNext())
{
var currentItem = (ProjectItem)items.Current;
projectItems.Add(GetFiles(currentItem));
}
return item;
}