Как сортировать классы/поля/методы/свойства в сборке .NET?

У меня есть сборка программы, для которой у меня нет доступа к исходному коду, и я хочу отсортировать ее классы в алфавитном порядке по их полному имени внутри сборки вместо использования порядка, указанного компилятором, используемым для ее создания.

Я пытался использовать для этого Mono.Cecil, но, похоже, я не могу изменить порядок классов в свойстве ModuleDefinition.Types, потому что это IEnumerable только для получения.

Итак, как мне изменить порядок элементов сборочного модуля? Или изменить его невозможно?


person Denwey Tharkt    schedule 18.06.2016    source источник
comment
So how do I change the order of the items of an assembly module? вы хотите изменить их порядок или вы хотите отображать их в каком-то порядке?   -  person Eser    schedule 19.06.2016
comment
Я хочу изменить их порядок в сборке, чтобы при использовании таких инструментов, как ILDasm, они выводились отсортированными.   -  person Denwey Tharkt    schedule 19.06.2016
comment
Извините, я думал, что знаю ответ, но понял, что недостаточно знаю о Mono.Cecil. Я думаю, что это невозможно сделать с Сесилом, но я не уверен на 100%.   -  person Nate Barbettini    schedule 19.06.2016
comment
Если вы случайно знаете какой-либо другой инструмент, который может это сделать, поделитесь с нами. :)   -  person Denwey Tharkt    schedule 19.06.2016


Ответы (1)


кажется, я не могу изменить порядок классов в свойстве ModuleDefinition.Types, потому что это IEnumerable только для получения.

Не совсем, это Collection<T> только для получения.

Это означает, что вы можете изменить порядок типов в нем, получив список типов из коллекции, отсортировав их, очистив Types и, наконец, прочитав их обратно. В коде:

var assembly = AssemblyDefinition.ReadAssembly(inputPath);

var module = assembly.MainModule;

var sorted = module.Types.OrderBy(t => t.FullName).ToList();

module.Types.Clear();

foreach (var type in sorted)
{
    module.Types.Add(type);
}

assembly.Write(outputPath);
person svick    schedule 18.06.2016
comment
Благодарю вас! Классы теперь полностью отсортированы! Я думал о подобном способе, но думал, что это испортит ссылки на классы, но на самом деле это работает. - person Denwey Tharkt; 19.06.2016