2016-06-18 36 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

謝謝!這些類現在完全排序!我正在考慮類似的方式,但認爲這會混淆類引用,但它實際上起作用。 –

相關問題