public static Assembly FindAssembly(string assemblyName)
{
IAssemblyEnum assemblyEnum = GacHelper.CreateGACEnum();
IAssemblyName nativeName;
List<AssemblyName> matches = new List<AssemblyName>();
while(GacHelper.GetNextAssembly(assemblyEnum, out nativeName) == 0)
{
string nameString = GacHelper.GetName(nativeName);
if(StringComparer.InvariantCultureIgnoreCase.Compare(nameString, assemblyName) == 0)
{
AssemblyName name = GacHelper.GetAssemblyName(nativeName);
matches.Add(name);
}
}
AssemblyName last = null;
for(int i = 0; i < matches.Count; i++)
{
AssemblyName current = matches[i];
if(last != null)
{
if(last.Version.Major <= current.Version.Major)
{
if(last.Version.Major < current.Version.Major)
{
last = current;
}
else
{
if(last.Version.Minor < current.Version.Minor)
{
last = current;
}
}
}
}
else
{
last = current;
}
}
if(last != null)
{
return Assembly.Load(last);
}
else
{
return null;
}
}