【Unity】【Firebase】System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"
FirebaseをUnityで使おうとしたら瞬速で躓いた。クイックスタートで躓くってなんなの?俺にはプログラマの才能がないの?ということで今日の日記スタート
子供が寝た後の時間でゴリゴリプログラム書くはずがエラーの解決で終わってしまった…。あるあるなんかな。
さて、1年以上病んでる間にプライベートプロジェクトが止まってしまいました。
これまでは、漫画をダラダラ読んだり、自己啓発読んだりしてコンディションを整えていました。
自己啓発本侮るなかれ、落ち込んでるときにはとことんやる気にさせてくれる。プロジェクトを再開だ!
久々にいじるとテーブルの中身とかも覚えてなくて、
必要な情報をどういうAPIで返せばいいかわからんくなってクソってなったり、
DBの中身入れ替えようとすると列が一個思ってたより足りなくてデータが上手く入らなくってクソってなったり、
Herokuにアップしてみたらバイナリが壊れてて動かなくてクソってなるので、Firebaseを使ってみようと思いたちました。
ていうか、俺みたいな初心者が作ったバックエンドとか信用ならないし、
どっかにミスがありそうだし、スケールとかでき無さそうですし、こういう発明があるなら使わないといけないですよね。
SDKを入れてすごく簡単にできるみたいだったので「ヘッヘー楽勝だぜ」とか思ったらUnityにエラーが出ている。
えぇー、クイックスタートでこれって、なんなの?こんなので躓くの全世界で俺だけじゃないの?
絶望しながら内容を見てみる。
む?なになに?
"System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"
→ポンコツ訳:リフレクションでエラーがスローされました。Mono.Cecilがアセンブリを解決できません。
Mono.Cecil?なにそれ?
Visualstudioで開いてみるも、参照設定にいない。
誰こいつ?
Monoってあれだよね、もともとUnityで使ってた.NETだよね?
Mono.Cecilについて調べてみる
"Mono.Cecilは.NETアセンブリを解析したり、書き換えたりするための便利なライブラリです。このライブラリを使うことで既存のコードを書き換えて新しいアセンブリを出力できます。"
https://www.misuzilla.org/Blog/2017/10/16/InjectILToAssemblyUsingCecilより引用
うーん、コンパイルされたあとのものをいじれるのかな?それをリフレクションというのか?すごいね、でもこれがエラーはいてるんだ?
Firebase SDKの中で使ってんのかな?
ネットで解決方法調べてもよくわからない。みんな、僕よりもっと深いなにかにハマっている
・https://github.com/lucaslorentz/minicover/issues/43
・https://github.com/lucaslorentz/minicover/issues/6
↑の中にあった「2.0.0-ci-20180517205544」という単語、きっとバージョンだろう。
あぁ、そうかNugetで更新すれば良いんだな。
でもこのサンプルプロジェクトにはNugetの設定ファイルがない…じゃあこいつはどっから読み込んでるの????
よし、こういうときはとりあえずリビルドしよう。男は黙ってリビルド。
ということでVisualStudioを開いてそちらでリビルド。
Unityの画面に戻ってきたらエラーが消えてる・・・・うーん、こんなのっていいの?
解決したのはすげー嬉しいけど、釈然としない。
もしかして、Unityの中は、Monoが嘘の.NET風ビルドしてて、
VisualStudioは本家ビルドなの?俺、何を言ってるんだろう。よくわかんなくなってきた。
おやすみなさい。
■今日のまとめ
・問題:
Firebase SDKを試そうとしたら、CustomAssetをインポートした時点で以下のエラーとなった。
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Google.VersionHandlerImpl,"
・原因:
Mono.Cecilがリフレクションに失敗する。
・解決方法:
VisualStudioでプロジェクト開いて、リビルド
・備忘メモ:
Mono.Cecilは正しくはこうやって使うらしい。
この人は、あとから実行ファイルにログを埋め込む実装をしてる。
http://king-of-nowhere.hatenablog.com/entry/2014/02/04/002817