2016-06-18 37 views
0

我有一个程序的程序集,我无法访问源代码,并且想要按照程序集内的完全限定名称按字母顺序对其类进行排序,而不是使用用于生成的编译器指定的顺序它。如何在.NET程序集中对类/字段/方法/属性进行排序?

我已经尝试过使用Mono.Cecil,但它似乎无法更改ModuleDefinition.Types属性中的类的顺序,因为它是只能得到的IEnumerable

那么如何更改装配模块的项目顺序?还是不可能改变它?

+0

'那么,如何更改程序集模块项目的顺序?“您是否想要更改顺序或是否要按某种顺序显示它们? – Eser

+0

我想改变它们在程序集中的顺序,这样当我使用像ILDasm这样的工具时,他们会输出它们。 –

+0

对不起,我以为我知道答案,但我意识到我对Mono.Cecil不够了解。我认为*这不可能与塞西尔做到这一点,但我不是100%确定的。 –

回答

0

看来我无法更改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); 
+0

谢谢!这些类现在完全排序!我正在考虑类似的方式,但认为这会混淆类引用,但它实际上起作用。 –

相关问题