Not a valid calendar for the given culture. Parameter name: value

トラブルシューティング

unity2019.3.10f1 standalone il2cpp

セーブデータに保存時のDateTimeを持たせ、それを表示する箇所でエラーになっていました。

原因

Unity IssueTracker - [IL2CPP] ArgumentOutOfRangeException is thrown when using the .NET methods for formatting dates and attempting to format dates
To reproduce: 1. Download attached project "ArabicCalendarMissing.zip" and open in Unity 2. Open "SampleScene" scene 3. Build for iO...

どうやら特定地域のカレンダーはIL2CppのManaged Code strippingで除かれているようです。僕はManaged Stripping Level Lowでした。

link.xmlでホワイトリストにいれないとダメみたいです。

対策

<linker>
<assembly fullname="System.Globalization.*Calendar" preserve="all"/>
</linker>

ひとまず、全カレンダーをアセンブリに含めるようにしました。windowsなんでアプリサイズとか気にするほどでもないでしょう。ワイルドカードを使ってみましたが、記法が正しいかは分かりません…

これでビルドして様子を見ようと思います。

追記

<linker>
<assembly fullname="mscorlib">
<namespace fullname="System.Globalization" preserve="all"/>
</assembly>
</linker>

こっちのがよいらしいです。

IL2CPP を使ったマネージバイトコードストリッピング - Unity マニュアル
マネージバイトコードストリッピングは、マネージアセンブリ (DLL) から使用しないコードを削除します。その処理は、まずルートアセンブリを定義し、それから、静的コード解析を使用してそれらのルートアセンブリが使用するマネージコードを定義します。アクセスできないコードはすべて削除されます。バイトコードストリッピングがコード...