Во-первых, я бы рекомендовал , а не делать это. Для этого вам нужно загрузить все сборки из GAC. Я бы порекомендовал, чтобы ваш пользователь (или администратор, или кто-то еще) сообщал вам, из каких сборок пытаться загрузить (хотя для этого вам может потребоваться список всех опций, возможно, поэтому вы спрашиваете об этом. ..)
Тем не менее, это может сработать, но оно выдает ошибки для нескольких сборок, на которые оно должно работать, и я не уверен, почему .... Кроме того, я не уверен, как определить, где находится GAC - c : \ windows \ assembly используется по умолчанию, но я не знаю, где хранится реальное значение (реестр?)
var targetType = typeof(IComparable);
var errors = new List<Exception>();
var c = Directory.GetFiles(@"c:\windows\assembly", "*.dll", SearchOption.AllDirectories).ToList()
.ConvertAll(f => Path.GetFileNameWithoutExtension(f))
.Where(f => !f.EndsWith(".ni"))
.Distinct().ToList()
.ConvertAll(f => { try { return Assembly.ReflectionOnlyLoad(f); } catch (Exception ex) { errors.Add(ex); return null; } })
.Where(a => a != null)
.SelectMany(a => { try { return a.GetTypes(); } catch (Exception ex) { errors.Add(ex); return new Type[] { }; } })
.Where(t => targetType.IsAssignableFrom(t));
Удачи с этим.