1 public static List<ProjectModel> While_ProjectRef(ProjectModel projectModel,SolutionModel solutionModel,
2 List<ProjectModel> ProjectCrip)
3 {
4 List<ProjectModel> Self_Refs = new List<ProjectModel>();
5 if(projectModel.Projectrefs.Count>0)
6 {
7 foreach(var ProjectRef in projectModel.Projectrefs)
8 {
9 //对于每一个项目引用进行分析
10 foreach (var project in solutionModel.Projects)
11 {
12 //寻找项目引用的projecta
13 if (project.Name == ProjectRef.Name)
14 {
15 //如果已经被分析过了,那么就不再分析这个子引用
16 if (ProjectCrip.Contains(project))
17 break;
18 ProjectCrip.Add(project);
19 Self_Refs.Add(project);
20 break;
21 }
22 }
23 }
24 foreach (var Project_ref in Self_Refs)
25 {
26 var child_project_ref=While_ProjectRef(Project_ref, solutionModel, ProjectCrip);
27 ProjectCrip = ProjectCrip.Union(child_project_ref).ToList();
28 }
29 }
30 return ProjectCrip;
31 }
32
33
34 static public void Main(string[] args)
35 {
36 SolutionModel solutionModel = new SolutionModel();
37 ProjectModel A1 = new ProjectModel();
38 A1.Name = "A1";
39 ProjectModel A2 = new ProjectModel();
40 A2.Name = "A2";
41 ProjectModel A3 = new ProjectModel();
42 A3.Name = "A3";
43 //Model1: A1-》A2-》A3
44 //A1.Projectrefs.Add(A2);
45 //A2.Projectrefs.Add(A3);
46 //Model2: A1-》A2-》A1
47 //A1.Projectrefs.Add(A2);
48 //A2.Projectrefs.Add(A1);
49 //Model3: A1-》A2-》A3->A1
50 //A1.Projectrefs.Add(A2);
51 //A2.Projectrefs.Add(A3);
52 //A2.Projectrefs.Add(A1);
53
54 //Model4: A1-》A2-》A3->A1
55 // A1->A3->A1
56 //A1.Projectrefs.Add(A2);
57 //A2.Projectrefs.Add(A3);
58 //A3.Projectrefs.Add(A1);
59
60 //A1.Projectrefs.Add(A3);
61 //A3.Projectrefs.Add(A1);
62 //Model5: A1-》A1
63 A1.Projectrefs.Add(A1);
64
65
66 solutionModel.Projects.Add(A1);
67 solutionModel.Projects.Add(A2);
68 solutionModel.Projects.Add(A3);
69
70 List<ProjectModel> result=new List<ProjectModel> ();
71 result = While_ProjectRef(A1, solutionModel, result);
72 if(!result.Contains(A1))
73 result.Add(A1);
74 Console.ReadKey();
75 }