【ILSpy】C#の実行ファイルからソースコードを復元する
Gitを知らない時代にソースコードを誤って消してしまったプログラムを思い出し、復元させてGitHubに改めて保存したいと考えた。そのプログラムはC#のWPF?を使ったアプリだったので、ILSpyというアプリで逆コンパイルできるらしく、その方法を試してみた。
コードの逆コンパイル
用意するもの
- exeファイル
- ILSpy
- (Visual Studio 2022)
手順
- 拡張機能->拡張機能の管理->オンラインに進み、右上の検索からILSpyを探してインストールする
- ツール->ILSpyをクリックすると、ILSpyのアプリが開く
- File->Open...からexeファイルを開くと、画面左側のAssembliesに逆コンパイルされたデータが追加される
- File->Save Code...から好きな場所に保存
コードの修正記録
そのままだとすごい数のエラーが出るかもしれないので、頑張って直す。
まず、依存関係のファイルを思い出して入れ直す。
Windowsが認識されない
画面右ソリューションエクスプローラー->依存関係右クリ->NuGet パッケージの管理->参照の検索からMicrosoft.Windows.SDK.Contractsをインストール
Windows.Devicesが認識されない
Visual StudioのNuGetで依存関係をインストールしているのに参照エラーが出た - Qiita
- System.Runtime.WindowsRuntimeを参照に入れる
- 依存関係右クリック->プロジェクト参照の追加左クリック
- 参照マネージャーが開くので、アセンブリ->OKの右の参照をクリック
- C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5
にある、System.Runtime.WindowsRuntime.dllを選択
- Visual Studioを2022にアップグレードする(上のWindowsRuntimeが重複してるって出たから上の工程は無駄だったっぽい)
-
Calling Windows 10 APIs From a Desktop Application - Windows Developer Blog
をもとにC:Program Files (x86)/Windows Kits/10/UnionMetadata/{バージョン}/Windows.winmdを参照する
→ここでWindows.Devicesが認識された。
その他エラー
internal で宣言されているオブジェクトをコメントアウト
参考にしたソースコードをもとに直す
最後に追加されたGeneratedCodeをコメントアウト
public class MainWindow を public partial classにした(最初からこうだっけ?)
これでエラーは全部消えた(動作未確認)。