private AssemblyDefinition SelfResolve(AssemblyNameReference name)
{
AssemblyDefinition assmDef;
if (!cache.TryGetValue (name.FullName, out assmDef)) {
assmDef = null;
string[] exts = new string[] { ".dll", ".exe" };
foreach (string ext in exts) {
string file = Path.Combine (project.Settings.InPath, name.Name + ext);
if (File.Exists (file) && MatchAssemblyName (file, name)) {
assmDef = AssemblyDefinition.ReadAssembly (file);
if (assmDef.Name.FullName != name.FullName) {
assmDef = null;
continue;
}
cache [name.FullName] = assmDef;
break;
}
}
if (assmDef == null) {
foreach (string extrapath in extraFolders) {
foreach (string ext in exts) {
string file = Path.Combine (extrapath, name.Name + ext);
if (File.Exists (file) && MatchAssemblyName (file, name)) {
assmDef = AssemblyDefinition.ReadAssembly (file);
if (assmDef.Name.FullName != name.FullName) {
assmDef = null;
continue;
}
cache [name.FullName] = assmDef;
return assmDef;
}
}
}
}
if (assmDef == null)
assmDef = resolver.Resolve(name);
if (assmDef != null)
cache[name.FullName] = assmDef;
}
return assmDef;
}