Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.cs28
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)