我有一個程序的程序集,我無法訪問源代碼,並且想要按照程序集內的完全限定名稱按字母順序對其類進行排序,而不是使用用於生成的編譯器指定的順序它。如何在.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%確定的。 –