diff options
Diffstat (limited to 'main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs')
-rw-r--r-- | main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs index 90adb3c67b..031bd2492f 100644 --- a/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs +++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Projects.MSBuild/DefaultMSBuildEngine.cs @@ -1042,12 +1042,12 @@ namespace MonoDevelop.Projects.MSBuild return CreateEvaluatedItem (context, project, project.Project, item, context.EvaluateString (item.Include)); } - IEnumerable<ProjectInfo> GetImportedProjects (ProjectInfo project, MSBuildImport import) + IReadOnlyList<ProjectInfo> GetImportedProjects (ProjectInfo project, MSBuildImport import) { List<ProjectInfo> prefProjects; if (project.ImportedProjects.TryGetValue (import, out prefProjects)) return prefProjects; - return Enumerable.Empty<ProjectInfo> (); + return Array.Empty<ProjectInfo> (); } void AddImportedProject (ProjectInfo project, MSBuildImport import, ProjectInfo imported) @@ -1068,10 +1068,12 @@ namespace MonoDevelop.Projects.MSBuild void Evaluate (ProjectInfo project, MSBuildEvaluationContext context, MSBuildImport import, bool evalItems) { - if (evalItems) { - // Properties have already been evaluated - // Don't evaluate properties, only items and other elements - foreach (var p in GetImportedProjects (project, import)) { + if (evalItems) {
+ // Properties have already been evaluated
+ // Don't evaluate properties, only items and other elements
+ var importedProjects = GetImportedProjects (project, import);
+ for (int i = 0; i < importedProjects.Count; ++i) { + var p = importedProjects [i]; EvaluateProject (p, new MSBuildEvaluationContext (context), true); @@ -1115,9 +1117,19 @@ namespace MonoDevelop.Projects.MSBuild // In that case, look in fallback search paths if (keepSearching) { - foreach (var prop in context.GetProjectImportSearchPaths ()) { - if (import.Project.IndexOf ("$(" + prop.Property + ")", StringComparison.OrdinalIgnoreCase) == -1) + // Short-circuit if we don't have an import that is done via a property. + int propertyStart = import.Project.IndexOf ("$(", StringComparison.Ordinal); + if (propertyStart == -1) + return; + + var importSearchPaths = context.GetProjectImportSearchPaths (); + for (int i = 0; i < importSearchPaths.Count; ++i) { + var prop = importSearchPaths [i]; + + // Start searching from where the property was found. + if (import.Project.IndexOf (prop.MSBuildProperty, propertyStart, StringComparison.OrdinalIgnoreCase) == -1) continue; + files = GetImportFiles (project, context, import, prop.Property, prop.Path, out resolvedSdksPath, out keepSearching); if (files != null) { foreach (var f in files) |