92 lines · 3.3 KB · C#
RawDownload
using System.Collections.Generic;using System.IO;using System.Linq;using System.Reflection;//using Microsoft.VisualStudio.TestTools.UnitTesting; namespace GSF.Web.Tests{    //[TestClass]    public class UtilityTest    {        //[TestMethod]        public void FindConflictingReferences()        {            string path = @"C:\Projects\gsf\Build\Output\Debug\Libraries\Web\";             System.Console.WriteLine("Target Path = " + path);             List<Assembly> assemblies = GetAllAssemblies(path);             List<Reference> references = GetReferencesFromAllAssemblies(assemblies);             IEnumerable<IGrouping<string, Reference>> groupsOfConflicts = FindReferencesWithTheSameShortNameButDiffererntFullNames(references);             foreach (IGrouping<string, Reference> group in groupsOfConflicts)            {                System.Console.WriteLine("Possible conflicts for {0}:", group.Key);                foreach (Reference reference in group)                {                    System.Console.WriteLine("{0} references {1}",                                          reference.Assembly.Name.PadRight(25),                                          reference.ReferencedAssembly.FullName);                }            }        }         private IEnumerable<IGrouping<string, Reference>> FindReferencesWithTheSameShortNameButDiffererntFullNames(List<Reference> references)        {            return from reference in references                   group reference by reference.ReferencedAssembly.Name                       into referenceGroup                   where referenceGroup.ToList().Select(reference => reference.ReferencedAssembly.FullName).Distinct().Count() > 1                   select referenceGroup;        }         private List<Reference> GetReferencesFromAllAssemblies(List<Assembly> assemblies)        {            List<Reference> references = new List<Reference>();            foreach (Assembly assembly in assemblies)            {                foreach (AssemblyName referencedAssembly in assembly.GetReferencedAssemblies())                {                    references.Add(new Reference                    {                        Assembly = assembly.GetName(),                        ReferencedAssembly = referencedAssembly                    });                }            }            return references;        }         private List<Assembly> GetAllAssemblies(string path)        {            List<FileInfo> files = new List<FileInfo>();            DirectoryInfo directoryToSearch = new DirectoryInfo(path);            files.AddRange(directoryToSearch.GetFiles("*.dll", SearchOption.AllDirectories));            files.AddRange(directoryToSearch.GetFiles("*.exe", SearchOption.AllDirectories));             return files.ConvertAll(file =>            {                try                {                    return Assembly.LoadFile(file.FullName);                }                catch                {                    return null;                }            })            .Where(assembly => assembly != null)            .ToList();        }         private class Reference        {            public AssemblyName Assembly { get; set; }            public AssemblyName ReferencedAssembly { get; set; }        }     }}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t