かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

英語圏の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を入れると落ちなくなる)

これ仕様なのかしら…。