diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index b32ddd3296..66b0cfbd30 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -525,6 +525,10 @@ namespace ICSharpCode.SharpDevelop.Project { } + /// + /// Resolves assembly references for this project. + /// The resulting list of resolved references will include project references. + /// public virtual IEnumerable ResolveAssemblyReferences(CancellationToken cancellationToken) { ResolveAssemblyReferences(); diff --git a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs index 7fbbc6f5dc..27446a7aa1 100644 --- a/src/Main/Base/Project/Src/Project/MSBuildInternals.cs +++ b/src/Main/Base/Project/Src/Project/MSBuildInternals.cs @@ -222,7 +222,7 @@ namespace ICSharpCode.SharpDevelop.Project var query = from msbuildItem in resolvedAssemblyProjectItems let originalInclude = msbuildItem.GetMetadataValue("OriginalItemSpec") - join item in referenceProjectItems on originalInclude equals item.Include into referenceItems + join item in referenceProjectItems.Where(p => p.ItemType != ItemType.ProjectReference) on originalInclude equals item.Include into referenceItems select new { OriginalInclude = originalInclude, AssemblyName = new DomAssemblyName(msbuildItem.GetMetadataValue("FusionName")), @@ -232,6 +232,7 @@ namespace ICSharpCode.SharpDevelop.Project ReferenceItems = referenceItems }; List resolvedAssemblies = new List(); + List handledReferenceItems = new List(); foreach (var assembly in query) { LoggingService.Debug("Got information about " + assembly.OriginalInclude + "; fullpath=" + assembly.FullPath); foreach (var referenceItem in assembly.ReferenceItems) { @@ -239,6 +240,7 @@ namespace ICSharpCode.SharpDevelop.Project referenceItem.FileName = assembly.FullPath; referenceItem.Redist = assembly.Redist; referenceItem.DefaultCopyLocalValue = assembly.CopyLocal; + handledReferenceItems.Add(referenceItem); } ReferenceProjectItem firstItem = assembly.ReferenceItems.FirstOrDefault(); if (firstItem != null) { @@ -247,6 +249,10 @@ namespace ICSharpCode.SharpDevelop.Project resolvedAssemblies.Add(new ReferenceProjectItem(baseProject, assembly.OriginalInclude) { FileName = assembly.FullPath }); } } + // Add any assemblies that weren't resolved yet. This is important - for example, this adds back project references. + foreach (var referenceItem in referenceProjectItems.Except(handledReferenceItems)) { + resolvedAssemblies.Add(referenceItem); + } return resolvedAssemblies; }