IEnumerable<string> GetAssemblyRefsRec (string fileName, HashSet<string> visited)
{
// Recursivelly finds assemblies referenced by the given assembly
if (!visited.Add (fileName))
yield break;
if (!File.Exists (fileName)) {
string ext = Path.GetExtension (fileName).ToLower ();
if (ext == ".dll" || ext == ".exe")
yield break;
if (File.Exists (fileName + ".dll"))
fileName = fileName + ".dll";
else if (File.Exists (fileName + ".exe"))
fileName = fileName + ".exe";
else
yield break;
}
yield return fileName;
foreach (var reference in SystemAssemblyService.GetAssemblyReferences (fileName)) {
string asmFile = Path.Combine (Path.GetDirectoryName (fileName), reference);
foreach (string refa in GetAssemblyRefsRec (asmFile, visited))
yield return refa;
}
}