如何在 .NET 程序集中对 classes/fields/methods/properties 进行排序?

How to sort classes/fields/methods/properties in a .NET assembly?

我有一个程序集,我无法访问它的源代码,我想按程序集内的完全限定名称的字母顺序对它的 类 进行排序,而不是使用顺序由用于生成它的编译器指定。

我试过为此使用 Mono.Cecil,但似乎我无法在 ModuleDefinition.Types 属性 中更改 类 的顺序,因为它是一个 get-只有 IEnumerable.

那么如何更改装配模块的项目顺序?还是无法更改?

it seems I can't change the order of classes within ModuleDefinition.Types property because it's a get-only IEnumerable.

不完全是,它是一个 get-only 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);