我有一个程序的程序集,我无法访问源代码,并且想要按照程序集内的完全限定名称按字母顺序对其类进行排序,而不是使用用于生成的编译器指定的顺序它。如何在.NET程序集中对类/字段/方法/属性进行排序?
我已经尝试过使用Mono.Cecil,但它似乎无法更改ModuleDefinition.Types
属性中的类的顺序,因为它是只能得到的IEnumerable
。
那么如何更改装配模块的项目顺序?还是不可能改变它?
我有一个程序的程序集,我无法访问源代码,并且想要按照程序集内的完全限定名称按字母顺序对其类进行排序,而不是使用用于生成的编译器指定的顺序它。如何在.NET程序集中对类/字段/方法/属性进行排序?
我已经尝试过使用Mono.Cecil,但它似乎无法更改ModuleDefinition.Types
属性中的类的顺序,因为它是只能得到的IEnumerable
。
那么如何更改装配模块的项目顺序?还是不可能改变它?
看来我无法更改
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);
谢谢!这些类现在完全排序!我正在考虑类似的方式,但认为这会混淆类引用,但它实际上起作用。 –
'那么,如何更改程序集模块项目的顺序?“您是否想要更改顺序或是否要按某种顺序显示它们? – Eser
我想改变它们在程序集中的顺序,这样当我使用像ILDasm这样的工具时,他们会输出它们。 –
对不起,我以为我知道答案,但我意识到我对Mono.Cecil不够了解。我认为*这不可能与塞西尔做到这一点,但我不是100%确定的。 –