2016-06-18 3 views
0

私はソースコードにアクセスできないプログラムのアセンブリを持っていて、生成に使用されたコンパイラによって指定された順序を使用する代わりに、そのクラスをアセンブリ内の完全修飾名でアルファベット順にソートしたいそれ。.NETアセンブリでクラス、フィールド、メソッド、またはプロパティを並べ替える方法は?

Mono.Cecilを使用しようとしましたが、IEnumerableのため、ModuleDefinition.Typesプロパティ内のクラスの順序を変更できないようです。

アセンブリモジュールのアイテムの順序を変更するにはどうすればよいですか?それともそれを変更することは不可能ですか?

+0

'それでは、どのように私は、アセンブリモジュールの項目の順序を変更するか、'あなたは彼らの順序を変更したいか、あなたには、いくつかの順序でそれらを表示したいですか?? – Eser

+0

ILDasmのようなツールを使用してソートされた結果を出力するように、アセンブリ内での順序を変更したいと思います。 –

+0

申し訳ありませんが、私は答えを知っていると思っていましたが、私はMono.Cecilについて十分に知りませんでした。私はCecilでこれを行うことはできないと思っていますが、私は100%確信していません。 –

答えて

0

IEnumerable-取得のみですので、私はModuleDefinition.Typesプロパティ内のクラスの順序を変更することはできませんようです。

これはあくまで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

ありがとう!クラスは完全にソートされました!私はこれと似たような考え方をしていましたが、クラス参照を混乱させると思っていましたが、実際には動作します。 –

関連する問題