Ответ 1
Я также использую этот дружественный мир DTE, чтобы создать Инструкцию. Я не нашел лучшего решения. В основном это методы, которые я использую:
Итерация проектов:
public static ProjectItem FindSolutionItemByName(DTE dte, string name, bool recursive)
{
ProjectItem projectItem = null;
foreach (Project project in dte.Solution.Projects)
{
projectItem = FindProjectItemInProject(project, name, recursive);
if (projectItem != null)
{
break;
}
}
return projectItem;
}
Найти в одном проекте:
public static ProjectItem FindProjectItemInProject(Project project, string name, bool recursive)
{
ProjectItem projectItem = null;
if (project.Kind != Constants.vsProjectKindSolutionItems)
{
if (project.ProjectItems != null && project.ProjectItems.Count > 0)
{
projectItem = DteHelper.FindItemByName(project.ProjectItems, name, recursive);
}
}
else
{
// if solution folder, one of its ProjectItems might be a real project
foreach (ProjectItem item in project.ProjectItems)
{
Project realProject = item.Object as Project;
if (realProject != null)
{
projectItem = FindProjectItemInProject(realProject, name, recursive);
if (projectItem != null)
{
break;
}
}
}
}
return projectItem;
}
Код, который я использую с другими фрагментами, можно найти здесь, в качестве руководства для новых проектов. Найдите исходный код и возьмите его.