nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

Xamarin.FormsでInitializeComponentが見つからないエラーの、五つの対処方法

Xamarin.FormsでXAMLを利用していると、PCLプロジェクトにリソースを追加したタイミングなんかでInitializeComponentや、x:Nameで定義したプロパティが見えないエラーが良く発生します。
しかもエラーは出ているのに、ビルド自体は成功します。

この問題は今のところ三つの対処方法があるもようです。
(他にも見かけた気がしますが思い出せない。。。)
本エントリーではその対処方法を記載します。

XAMLファイルを修正してリビルドする

Xamarin.Forms業界?では最も知名な不具合と対処方法かもしれません。
XAMLファイルを開いて、適当な空白やエンターを追加するなり、削除するなりして変更した上でリビルドします。
そうすることでXAMLを再認識?してエラーが消えるようです。

プロジェクトをソリューションから削除して再追加する

1番目の手順で直らずハマっていたところ、これに気が付いてやっと対処できました。
我ながらよく気が付いたなと。。。
以下の手順で直ります。

  1. プロジェクトをソリューションから一旦削除する
    おそらくPCLプロジェクトだけでよいと思いますが、思い余って全部消してしまったので未確認です。
  2. ソリューションを保存し、一旦ソリューションを閉じる
  3. ソリューションを開き直す
  4. 削除したプロジェクトを再度追加する
  5. リビルドする

これで直りました。
.slnファイルの差分取っておけばよかったけど、後の祭り。

2016/06/02 追記
やはりPCLプロジェクトのみを削除すれば直るようです。
ただし、その場合、Nativeプロジェクト(DroidとかiOS)から、PCLプロジェクトへの参照が外れてしまうため張りなおす必要があるそうです。
こちらの情報は@ken_zookie さんに教えていただきました!
ありがとうございました。

アセンブリ名をPCLとネイティブで別名にする

これは今日困っていたところ、Senu (@senusenusenu) | Twitter さんに教えていただきました。
私自身はまだ遭遇したことがありません。
PCLのプロジェクトのアセンブリ名と、ネイティブプロジェクトのアセンブリ名が一致していると発生するそうです。
対処方法は、デフォルトのXamarin.Forms同様に異なる名称を付けることで解消すると思います。
アセンブリ名は、プロジェクトのプロパティ内から変更できます。

追記 この状態だと、ビルドは通っても実行できないようです

気にしない

お、おう。
真面目な話、エラーにはなりますが、たいてい動作しますので都度対応しないである程度スルーするというのも、ありかもしれません。

Xamarin.Formsの参照をいったん削除し、NuGetから当て直してみる

これもSenu (@senusenusenu) | Twitter さんに教えていただきました。

http://senusenusenusenu.web.fc2.com/HTML/tnl.html

ありがとうございました!
Xamarin.FormsのバージョンとXamarinのバージョンの組み合わせが原因なんですかね?

とりあえず、FormsのバージョンとXamarinのバージョンを最新にしてみてください。
FormsはNuGetから、Xamarin for Visual Studioのバージョンのアップデート方法はこちらを参考にどうぞ。

nuits.hatenadiary.jp

以上です。
それではまた!