Last active
January 12, 2016 12:50
-
-
Save ascjones/5f50b4f8e68a59437481 to your computer and use it in GitHub Desktop.
Script to find conflicting .NET assembly references
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// translated to F# Script from https://gist.github.com/brianlow/1553265 | |
open System.IO | |
open System.Reflection | |
type Reference = { | |
Assembly : AssemblyName | |
ReferencedAssembly : AssemblyName | |
} | |
let getAllAssemblyRefs path = seq { | |
let searchDir = DirectoryInfo(path) | |
for file in searchDir.EnumerateFiles("*.*", SearchOption.AllDirectories) do | |
if file.Extension = ".exe" || file.Extension = ".dll" then | |
let asm = Assembly.LoadFile(file.FullName) | |
for referencedAsm in asm.GetReferencedAssemblies () do | |
yield { Assembly = asm.GetName (); ReferencedAssembly = referencedAsm } | |
} | |
let refsWithSameShortNameButDifferentFullName assemblyRefs = | |
assemblyRefs | |
|> Seq.groupBy (fun ref -> ref.ReferencedAssembly.Name) | |
|> Seq.filter (fun (_,refs) -> | |
let refCount = | |
refs | |
|> Seq.distinctBy (fun ref -> ref.ReferencedAssembly.FullName) | |
|> Seq.length | |
refCount > 1) | |
let printPossibleConflict (name,assemblyRefs) = | |
printfn "Possible conflicts for %s" name | |
for ref in assemblyRefs do | |
printfn "%s references %s" (ref.Assembly.Name.PadRight 40) (ref.ReferencedAssembly.FullName) | |
printfn "" | |
let findPossibleConflicts path exclude = | |
getAllAssemblyRefs path | |
|> Seq.filter (fun ref -> not (exclude |> Seq.exists ((=) ref.ReferencedAssembly.Name))) | |
|> refsWithSameShortNameButDifferentFullName | |
|> Seq.iter printPossibleConflict | |
findPossibleConflicts | |
@"C:\code\<solution>\<project>\bin\Debug" | |
["mscorlib"; "System.Core"; "System"; "System.Xml"; "FSharp.Core"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment