Xamarin.FormsでXAMLを利用していると、PCLプロジェクトにリソースを追加したタイミングなんかでInitializeComponentや、x:Nameで定義したプロパティが見えないエラーが良く発生します。
しかもエラーは出ているのに、ビルド自体は成功します。
この問題は今のところ三つの対処方法があるもようです。
(他にも見かけた気がしますが思い出せない。。。)
本エントリーではその対処方法を記載します。
XAMLファイルを修正してリビルドする
Xamarin.Forms業界?では最も知名な不具合と対処方法かもしれません。
XAMLファイルを開いて、適当な空白やエンターを追加するなり、削除するなりして変更した上でリビルドします。
そうすることでXAMLを再認識?してエラーが消えるようです。
プロジェクトをソリューションから削除して再追加する
1番目の手順で直らずハマっていたところ、これに気が付いてやっと対処できました。
我ながらよく気が付いたなと。。。
以下の手順で直ります。
- プロジェクトをソリューションから一旦削除する
おそらくPCLプロジェクトだけでよいと思いますが、思い余って全部消してしまったので未確認です。 - ソリューションを保存し、一旦ソリューションを閉じる
- ソリューションを開き直す
- 削除したプロジェクトを再度追加する
- リビルドする
これで直りました。
.slnファイルの差分取っておけばよかったけど、後の祭り。
2016/06/02 追記
やはりPCLプロジェクトのみを削除すれば直るようです。
ただし、その場合、Nativeプロジェクト(DroidとかiOS)から、PCLプロジェクトへの参照が外れてしまうため張りなおす必要があるそうです。
こちらの情報は@ken_zookie さんに教えていただきました!
ありがとうございました。
@nuits_jp 直りました!奥の手ですね。補足として、 Droid, iOS から PCL への参照が消えちゃったので、最後に追加しなおす必要がありました。ありがとうございます!
— けん⚡Xamarinフロンティアスピリッ (@ken_zookie) June 1, 2016
アセンブリ名をPCLとネイティブで別名にする
これは今日困っていたところ、Senu (@senusenusenu) | Twitter さんに教えていただきました。
私自身はまだ遭遇したことがありません。
PCLのプロジェクトのアセンブリ名と、ネイティブプロジェクトのアセンブリ名が一致していると発生するそうです。
対処方法は、デフォルトのXamarin.Forms同様に異なる名称を付けることで解消すると思います。
アセンブリ名は、プロジェクトのプロパティ内から変更できます。
追記 この状態だと、ビルドは通っても実行できないようです
気にしない
対処4:気にしない
— Xamarin.Formsマン(求職中) (@ticktackmobile) 2016年5月20日
を実施しています。https://t.co/cZVtcM8mhL
お、おう。
真面目な話、エラーにはなりますが、たいてい動作しますので都度対応しないである程度スルーするというのも、ありかもしれません。
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のバージョンのアップデート方法はこちらを参考にどうぞ。
以上です。
それではまた!