static IEnumerable <FilePath> GetSolutionFolderFiles(SolutionFolder rootFolder) { foreach (SolutionFolder folder in rootFolder.GetAllItems <SolutionFolder> ()) { foreach (FilePath file in folder.Files) { yield return(file); } } }
public static void ResolveProjectReferences (SolutionFolder folder, IProgressMonitor monitor) { Dictionary<string, DotNetProject> projects = new Dictionary<string, DotNetProject> (); foreach (DotNetProject p in folder.GetAllItems<DotNetProject> ()) { string filename = p.GetOutputFileName (ConfigurationSelector.Default); // Can be null for Generic projects if (!String.IsNullOrEmpty (filename)) projects [filename] = p; } foreach (DotNetProject sproj in projects.Values) { MakefileData mdata = sproj.ExtendedProperties ["MonoDevelop.Autotools.MakefileInfo"] as MakefileData; if (mdata == null) continue; if (mdata.UnresolvedReferences.Count != 0) { Dictionary<string, ProjectReference> asmProjectRefs = new Dictionary<string, ProjectReference> (); foreach (ProjectReference pr in sproj.References) { if (pr.ReferenceType != ReferenceType.Assembly && pr.ReferenceType != ReferenceType.Project) continue; string [] files = pr.GetReferencedFileNames (ConfigurationSelector.Default); if (files.Length > 0) asmProjectRefs [files [0]] = pr; } List<string> toRemove = new List<string> (); foreach (string refstr in mdata.UnresolvedReferences.Keys) { if (asmProjectRefs.ContainsKey (refstr)) { // ref already exists in the project toRemove.Add (refstr); asmProjectRefs.Remove (refstr); } else { // Try as a project ref if (projects.ContainsKey (refstr)) { sproj.References.Add (new ProjectReference (projects [refstr])); toRemove.Add (refstr); } } } foreach (string s in toRemove) mdata.UnresolvedReferences.Remove (s); // Add all remaining unresolved refs as Assembly refs foreach (string s in mdata.UnresolvedReferences.Keys) sproj.References.Add (new ProjectReference (ReferenceType.Assembly, s)); // Remove asm/project refs not found in UnresolvedReferences foreach (ProjectReference pr in asmProjectRefs.Values) sproj.References.Remove (pr); mdata.UnresolvedReferences.Clear (); } mdata.UpdateMakefile (monitor); } }