こんにちは。エクセルソフトの田淵です。
時々、Xamarin.Android プロジェクトの Resources/drawable
に画像を追加すると、 Visual Studio が死ぬことがあります。
2015/10/13 最近は固まらないですね。直ってるのかな?
2015/9/3 現在の Visual Studio 2013/2015 と Xamarin 3.11.837.0 で発生しています。将来は直っているといいなぁ…
以下は ImageItem.png を追加したい…という所ですw
固まってしまったものは仕方ありません。タスクマネージャーから Visual Studio を落とします。やっかいなのが、一度この問題が発生すると、Visual Studio だけではなかなか復旧できないことです。同じことをやっても同じように落ちます。。
復旧方法
csproj を手動で編集する
Visual Studio を落とした後で冷静に該当の Xamarin.Android プロジェクトのフォルダに移動しましょう。
@ytabuchi 本当に作業に支障が出て困るレベルならcsprojを直接編集したほうが早いかもしれませんね。AndroidResource要素を(既存のcsprojなどを参考に)追加できれば大丈夫です。あとResource.Designer.csを消すのはまずいです。
— Atsushi Eno (@atsushieno) 2015, 9月 3
@atsushieno さんに教えていただきましたが、csproj
を直接編集してしまえば良いのです。
csproj をテキストエディタで開きます。
<AndroidResource Include="
と書いてある行を探し、<ItemGroup></ItemGroup>
の最後に <AndroidResource Include="Resources\drawable\<ファイル名>.png" />
と追加してあげましょう。
その後、Visual Studio で該当ソリューションを開くと、Resource.Designer.cs にもリソースが自動的に追加されるので今まで通り作業を続けることが可能です。お疲れ様でした!
なお、Resource.Designer.cs ですが、FindViewById など、「リソースを参照する際に紐づけをしている」ファイルなので、手動でどうのこうの出来ません。
@ytabuchi Resource.Designer.csはちょっと扱いが特殊で、csprojファイルの中でプロパティとして指定されていて、Androidリソースファイルの変更があったときに、そのプロパティが指定するファイルの内容を変更するのです。無いとそれが動かなくなる…
— Atsushi Eno (@atsushieno) 2015, 9月 3
Xamarin Studio を使用する
csproj を編集するのが怖いなぁという方は Xamarin Studio を起動ましょう。
Resources/drawable に移動して、右クリックから 追加>ファイルを追加
で追加したいファイルを指定して取り込みます。これで csproj
と Resource.Designer.cs
の両方が適切に修正されます。
Xamarin Studio を閉じて、再度 Visual Studio でソリューションを開いて開発を続けましょう。
原因の考察と以降の対応
Resource.Designer.cs にはリソース情報が追加されていて、csproj には AndroidResource が追加されていないことがありました。恐らくですが、Visual Studio の Xamarin.Android プロジェクトで csproj に上手く書き込めなくなることがあるように思えます。
一度 csproj を手動で編集して Resource.Designer.cs が自動生成されれば大丈夫な事が多いようですが、この問題の対処をした後は、
- 一度 Android プロジェクトを「アンロードして」、Windows エクスプローラーで画像をコピーし、手動で csproj を修正して
プロジェクトを再読み込み
する
- 画像を追加する時は Xamarin Studio を使う
のどちらかで対処していただければと思います。面倒ですね… Xamarin にも報告しておきます。
Xamarin 気になった方は
是非 ダウンロード(直接) / ダウンロード(弊社経由) して触ってみてください。 学習用リソース や JXUG リンクページ に参考資料を纏めてますので併せてどうぞ。
Xamarin の情報が欲しい方はこのブログも購読いただいたりすると嬉しいです。
以上です。