はじめに
Xamarinは全然初心者です。本業はPHPer。
社内の施策として、業務外でチームを組んでXamarin.Formsでアプリ開発をしていました。
いかんせんC#を書くのもままならないような初心者(※)ですので、頻繁にシミュレーターを実行して、どういう状態なのかを確認して、少し直してはまた実行…を繰り返していました。
※PHPとノリが違い過ぎて戸惑ってます。。
そうすると、たまに「Xamarin.Forms.Xaml.XamlParseException: No embeddedresources found」
というエラーに遭遇して、iOSやAndroidのシミュレーターが止まることがありました。
あまりに原因不明なこのエラーなのですが、何回も出くわすうちに原因や、エラーが出た時の対処法が分かってきたので、備忘録として記しておきます。
実行環境
- macOS 10.13 High Sierra
- Visual Studio For Mac
そもそもコレは何なのか
「Xamarin.Forms.Xaml.XamlParseException: No embeddedresources found」
このエラー、検索してもロクな記述を見かけないのです。
数少ない記述としては、以下のStackoverflowがありますが。。。
xamarin - No embedded resource found - Stack Overflow
It's a bug. For some reason its status is RESOLVED FIXED, but it doesn't seem fixed at all. On XS on mac anyway.
「それはバグです。解決済みステータスになってるけど、全部は直りきってないみたいね!とにかくMacのXamarin Studioではね。」(超意訳)
バグで片付けないでくださいよー!
しかもMac版Xamarin Studioだと顕著な様子。
当方 Visual Studio For Mac なんですが。。Xamarin Studioのリブランド版ともっぱらの噂の。
just make an edit to that one generated file, save it, and build again. A bit faster than rebuilding everything.
Of course this means every time you change a .xaml file, you have to build twice.
「編集して、保存して、再度ビルドしてね。もちろんこれはあなたがXAMLファイルを毎回毎回変更することを意味するよ! 2回ビルドしてね!」 (適当意訳)
…つまるところ、バグだからとりあえず変更与えて再度ビルドして、どうにかしろ、ということなようです。
それではラチがあきません。
原因ぽいもの
何回も出くわすうちにパターンが分かってきました。
どうもコイツは、 最後まで描写されなかったページがあると発生率が高い っぽいです。
おまけに Mac の場合。
私はiOSシミュレーターで多発していました。
Androidは未確認ですが、Xamarin.Formsのエラーなので、恐らく同様であると思われます。
どういうことか
「最後まで描写されなかった」というのは、「ブレークポイントで一旦止めて、そのまま 最後まで実行しないでデバッガーを停止する 」ことや、「 途中で例外が発生するなどして、最後まで実行されなかった 」ことを指します。
…よくやりますよね、変数の中身確認するためだけにデバッガー動かして、確認出来たら、プログラムが途中だろうがそこで止めちゃうの。
私みたいな初心者は特に。
コレがXamarinではハマりどころになるっぽいです。
何でこれでエラーになるのかは正直分かりません。
ただ、私の環境ではコレやった後、高確率でこのエラーに出くわしました。
前者のパターンの場合は、コードがどっかおかしいのかと思いきや、ソリューション閉じてもう一度開けば何事も無かったかのように動くので、コードの問題ではありません。
対処法
対処法その1
先述のStackoverflowにもあったように、適当に編集加えて、再度ビルドすること。
しかしこちらでやる限り、それでもこのエラーが出ることが多いです。
対処法その2
一度ソリューションを閉じて、開き直すこと。
これは言うまでもなく、毎回そうするのはダルいです。
対処法その3
一度 ソリューションをクリーン してから、再度ビルドすること。
PCLの場合は、PCLをクリーンでも大丈夫です。
これだったら大体解決することが多いと分かったので、これで行うことが多いです。
おわりに
Visual Studio For MacでXamarinやってる方は少なからずいるはずなので、もう少し情報があっても良さそうなものなのですが、もしかして環境によるのか…?
ともあれ、同じ現象に悩まされている方の手がかりになれば幸いです。
…主に、未来の自分ですが。