Quantcast
Channel: .Net
Viewing all articles
Browse latest Browse all 10

How to get all projects that exists in a Visual Studio Solution

$
0
0

Recently during a software factory development I had a problem, how can I get all projects that exists in a visual studio solution.

The only solution that I found was this:

 

public static Project[] GetAllSolutionProjects(Solution solution)
{
if (solution == null)
{
return null;
}

List<Project> solutionProjects = new List<Project>();

foreach (Project project in solution.Projects)
{
if (project.Object is Project)
{
solutionProjects.Add(project.Object as Project);
}
else
{
Project[] projects = GetAllVsProjects(project.ProjectItems);

if (projects != null && projects.Length > 0)
{
solutionProjects.AddRange(projects);
}
}
}

return solutionProjects.ToArray();
}

private static Project[] GetAllVsProjects(ProjectItems items)
{
if (items == null)
{
return null;
}

List<Project> solutionProjects = new List<Project>();

foreach (ProjectItem item in items)
{
if (IsProject(item.Kind))
{
solutionProjects.Add(item.Object as Project);
}
else if (item.SubProject != null)
{
if (IsProject(item.SubProject.Kind))
{
solutionProjects.Add(item.SubProject as Project);
}
else
{
Project[] subprojects = GetAllVsProjects(item.SubProject.ProjectItems);

if (subprojects != null && subprojects.Length > 0)
{
solutionProjects.AddRange(subprojects);
}
}
}
else
{
Project[] projects = GetAllVsProjects(item.ProjectItems);

if (projects != null && projects.Length > 0)
{
solutionProjects.AddRange(projects);
}
}
}

return solutionProjects.ToArray();
}


public static bool IsProject(Guid projectKind)
{
//Visual Basic {F184B08F-C81C-45F6-A57F-5ABD9991F28F}
//Visual C# {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
//Visual C++ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}
//Visual J# {E6FDF86B-F3D1-11D4-8576-0002A516ECE8}
//Web Project {E24C65DC-7377-472b-9ABA-BC803B73C61A}

return IsWebProject(projectKind) ||
IsVisualJSharpProject(projectKind) ||
IsVisualCPlusPlusProject(projectKind) ||
IsVisualCSharpProject(projectKind) ||
IsVisualBasicProject(projectKind);
}

public static bool IsProject(string projectKind)
{
if(string.IsNullOrEmpty(projectKind))
{
return false;
}

return IsProject(new Guid(projectKind));
}

public static bool IsWebProject(Guid projectKind)
{
return projectKind.CompareTo(new Guid("{E24C65DC-7377-472b-9ABA-BC803B73C61A}")) == 0;
}

public static bool IsVisualJSharpProject(Guid projectKind)
{
return projectKind.CompareTo(new Guid("{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}")) == 0;
}

public static bool IsVisualCPlusPlusProject(Guid projectKind)
{
return projectKind.CompareTo(new Guid("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}")) == 0;
}

public static bool IsVisualCSharpProject(Guid projectKind)
{
return projectKind.CompareTo(new Guid("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}")) == 0;
}

public static bool IsVisualBasicProject(Guid projectKind)
{
return projectKind.CompareTo(new Guid("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}")) == 0;
}

 

Can any one tell me if is there a simple solution to get all projects in a VS solution, because this seems to me too much code just to get all projects. Is there another way???

 

The projects I want are: Visual Basic, Visual C#, Visual C++, Visual J# and Web Project. I was only able to do this watching to the project kind property.

 

Is there another way???


Viewing all articles
Browse latest Browse all 10

Trending Articles