【ILSpy】C#の実行ファイルからソースコードを復元する

Gitを知らない時代にソースコードを誤って消してしまったプログラムを思い出し、復元させてGitHubに改めて保存したいと考えた。そのプログラムはC#WPF?を使ったアプリだったので、ILSpyというアプリで逆コンパイルできるらしく、その方法を試してみた。

コードの逆コンパイル

用意するもの

手順

  1. 拡張機能->拡張機能の管理->オンラインに進み、右上の検索からILSpyを探してインストールする
  2. ツール->ILSpyをクリックすると、ILSpyのアプリが開く
  3. File->Open...からexeファイルを開くと、画面左側のAssembliesに逆コンパイルされたデータが追加される

  4. File->Save Code...から好きな場所に保存

 

コードの修正記録

そのままだとすごい数のエラーが出るかもしれないので、頑張って直す。

まず、依存関係のファイルを思い出して入れ直す。

Windowsが認識されない

画面右ソリューションエクスプローラー->依存関係右クリ->NuGet パッケージの管理->参照の検索からMicrosoft.Windows.SDK.Contractsをインストール

Windows.Devicesが認識されない

Visual StudioのNuGetで依存関係をインストールしているのに参照エラーが出た - Qiita

 

  • System.Runtime.WindowsRuntimeを参照に入れる
  1. 依存関係右クリック->プロジェクト参照の追加左クリック
  2. 参照マネージャーが開くので、アセンブリ->OKの右の参照をクリック
  3. C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
    にある、System.Runtime.WindowsRuntime.dllを選択

→ここでWindows.Devicesが認識された。

その他エラー

internal で宣言されているオブジェクトをコメントアウト

参考にしたソースコードをもとに直す

  • 関数とかawaitの表現がおかしくなっている
  • Object.hoge.hugaとかがObject.get_hoge().get_huga()とかになっている

最後に追加されたGeneratedCodeをコメントアウト

public class MainWindow を public partial classにした(最初からこうだっけ?)

これでエラーは全部消えた(動作未確認)。