dnSpyとは?
C#で作った実行可能ファイルやDLL(詳しく言うと違うが)をC#のコードとして覗いたり、改変したりすることができるツール。
最近のゲーム業界なんかはC#がなぜか標準になっているので、主にゲームのチートを作るのに使われている。
dnSpyでできること
デコンパイルしたコードを眺めるだけでなく、変数なんかがどこで使われていたりとかを調べたり、設定次第でデバッガーとして利用することもできる。まあ一番の機能はデコンパイルして改変する機能で、一部がコンパイルエラーを吐いたりしても無視して部分コンパイルできるのはすごく便利である。普通にビルドに時間がかかるものを少しだけ改変したいときはこいつを使うのも正規の開発でも十分ありえる。
dnSpyでコンパイルできないことがある
本題。
dnSpyは特定のC#の機能に対してはうまくデコンパイルが働かないようで、例えばLINQのWhere()だったり、async/awaitだったりは元のC#ではなくて、コンパイラーが自動生成した中間コードに寄ったコードになってしまい、元のコードを再現してくれない。
そういうときは元のコードを推測して脳内デコンパイルをしないといけないのだが、これがまた難しい。
見分け方としてはenumerator2など数字がついたそのまんまな変数があって、コンパイルエラーを吐く部分だ。
元のLINQなどのコードがわかっていればなんとなく脳内デコンパイルできるようになる。