かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

英語圏のPCLライブラリを日本語環境のUWPで使うとエラーで落ちるかもしれない… #windev_jp

Prism.UnityのUWP版を使ってリリースビルドすると、アプリ起動時に落ちるので何だろうと数日探ったところ以下の条件がそろったときに例外が発生することがわかりました。

  • 設定 → 時刻と言語 → 地域と言語の言語にEnglishが追加されていない(デフォルトそうだよね??)
  • PCLのライブラリのAssemblyInfoにNeutralResourcesLanguage("en")が設定されている(英語圏の環境で作るとこうなるっぽい)
  • PCLのライブラリでリソースを作ってるが特に多言語化はされていない(普通にリソース作っただけ)
  • UWPの言語設定がja-JPになっている
  • UWPからPCLで定義されたリソースに間接的にでもアクセスする

因みに発生する例外はNullReferenceExceptionってなるときもあればArgumentNullExceptionになることもあるかな。どういう条件のときにNullReferenceExceptionで、どういう条件のときにArgumentNullExceptionなのかは追い切れてません。

再現プロジェクト

GitHubに再現するプロジェクトおいてみました。

github.com

上記リポジトリをCloneしてHelloWorldAppをスタートアッププロジェクトにしてReleaseのx86にして実行すると落ちるはずです。(OSの言語の設定にEnglishを入れると落ちなくなる)

これ仕様なのかしら…。