/// <summary> /// Resolves conflicts between all of the resolved references. /// If the same assembly name is duplicated with different versions, /// resolve to the higher version number. /// </summary> void ResolveConflicts() { var sortedReferences = usedReferences. Select(r => assemblyCache.GetAssemblyInfo(r.Key)). OrderBy(r => r.Version). ToArray(); Dictionary <string, AssemblyInfo> finalAssemblyList = new Dictionary <string, AssemblyInfo>(); // Pick the highest version for each assembly name foreach (var r in sortedReferences) { finalAssemblyList[r.Name] = r; } // Update the used references list usedReferences.Clear(); foreach (var r in finalAssemblyList.Select(r => r.Value.Filename)) { UseReference(r); } // Report the results foreach (var r in sortedReferences) { var resolvedInfo = finalAssemblyList[r.Name]; if (resolvedInfo.Version != r.Version) { progressMonitor.ResolvedConflict(r.Id, resolvedInfo.Id); ++conflictedReferences; } } }
/// <summary> /// Resolves conflicts between all of the resolved references. /// If the same assembly name is duplicated with different versions, /// resolve to the higher version number. /// </summary> private void ResolveConflicts() { var sortedReferences = new List <AssemblyInfo>(); foreach (var usedReference in usedReferences) { try { var assemblyInfo = assemblyCache.GetAssemblyInfo(usedReference.Key); sortedReferences.Add(assemblyInfo); } catch (AssemblyLoadException) { progressMonitor.Log(Util.Logging.Severity.Warning, $"Could not load assembly information from {usedReference.Key}"); } } sortedReferences = sortedReferences.OrderBy(r => r.Version).ToList(); var finalAssemblyList = new Dictionary <string, AssemblyInfo>(); // Pick the highest version for each assembly name foreach (var r in sortedReferences) { finalAssemblyList[r.Name] = r; } // Update the used references list usedReferences.Clear(); foreach (var r in finalAssemblyList.Select(r => r.Value.Filename)) { UseReference(r); } // Report the results foreach (var r in sortedReferences) { var resolvedInfo = finalAssemblyList[r.Name]; if (resolvedInfo.Version != r.Version) { progressMonitor.ResolvedConflict(r.Id, resolvedInfo.Id); ++conflictedReferences; } } }