Xamarin.Formsではバージョンに関係なく、次のようなケースで元々"XamlCTask task failed unexpectedly"が発生する事がありました。
- ソリューション内のプロジェクトによってXamarin.Formsのバージョンが違う
(よくUWPのプロジェクトだけ更新に失敗したりします) - Xamarin.Formsのバージョンをアップデートして、packagesフォルダに古いバージョンが残っている
これらはそれぞれ次の対策で解決する事ができまいした。
- ソリューション内のXamarin.Formsのバージョンを統一する
- packagesフォルダから古いXamarin.Formsのフォルダを削除する
ただ、2.3.4.247のバージョンには固有の不具合があり、これらとは別原因で"XamlCTask task failed unexpectedly"が発生する事があります。
ただし個人的な経験から再現性は100%ではなく、ただし低くもないといった感じです。
これの対策方法ですが、つぎの二つの対処方法があります。
- Xamarin Forms 2.3.5-pre3より新しいバージョンにアップデートする
- Xamarin.Forms.targetsファイルを手で修正する
つぎのXamarin.Forms 2.4から対処されるでしょうが、Previewは入れられないという人も多いでしょう。
というわけで2.の方法を記載しておきます。
まずソリューションフォルダ下のpackagesフォルダ内の次のパスを開いてください。
Xamarin.Forms.2.3.4.270\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20
開くと、つぎのようなファイルがありますが、この中のXamarin.Forms.targetsをテキストエディタで開きます。
ファイルの末尾のほうに、つぎのような記載があります。
<Target Name="XamlC"> <XamlCTask Assembly = "$(IntermediateOutputPath)$(TargetFileName)" ReferencePath = "@(ReferencePath)" Verbosity = "2" OptimizeIL = "true" DebugSymbols = "$(DebugSymbols)" DebugType = "$(DebugType)"/> </Target>
ここの「DebugType = “$(DebugType)"」を削除して次のように修正します。
<Target Name="XamlC"> <XamlCTask Assembly = "$(IntermediateOutputPath)$(TargetFileName)" ReferencePath = "@(ReferencePath)" Verbosity = "2" OptimizeIL = "true" DebugSymbols = "$(DebugSymbols)"/> </Target>
これで問題なくビルドできるはずです。
元々海外のフォーラムで対策を見つけたのですが、元情報がどこだったか完全に失念したため、リンク張るのは諦めます。。。