如何在 .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);
我有一个程序集,我无法访问它的源代码,我想按程序集内的完全限定名称的字母顺序对它的 类 进行排序,而不是使用顺序由用于生成它的编译器指定。
我试过为此使用 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-onlyIEnumerable
.
不完全是,它是一个 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);