Мне потребовалось упорядочить отсортировать некоторую коллекцию объектов, классы которых определены в разных, динамически загружаемых при помощи метода Assembly.LoadFrom() сборках, по принципу зависимости сборок друг от друга. Алгоритм сортировки выглядит примерно так:
int CompareTo(Object a, Object b)
{
Assembly asmA = a.GetType().Assembly;
Assembly asmB = b.GetType().Assembly;
AssemblyName[] asmARefNames = asmA.GetReferencedAssemblies();
foreach (asmARefName in asmARefNames)
{
if (asmARefName.Equals(asmBRefName))
return +1;
...
}
...
return 0; // -1
}
Выяснилась следующая вещь: если проект A в солюшене ссылается на проект B, но не создает ни одного экземпляра класса из проекта B или использует только константы из проекта B, то сборка B не попадает в список сборок, на которые ссылается сборка А, в момент вызова метода asmA.GetReferencedAssemblies().