Unity 2021.3安装NodaTime 3.1.6失败,求适配iOS/Android的解决方案
Unity 2021.3中适配IL2CPP安装NodaTime 3.1.6的解决方案
问题核心原因
Unity的项目结构和标准.NET项目存在差异,直接通过Visual Studio NuGet或dotnet add package安装的NodaTime无法被Unity的IL2CPP构建系统正确识别;同时IL2CPP的AOT编译特性会自动裁剪未被显式引用的代码,最终导致构建时出现类型找不到的报错。
具体解决步骤
1. 手动导入NodaTime程序集
- 下载NodaTime 3.1.6的NuGet包,解压后找到
lib/netstandard2.1目录下的NodaTime.dll(若需要序列化功能,同时取出NodaTime.Serialization.JsonNet.dll)。 - 将这些dll复制到Unity项目的
Assets/Plugins目录下(无此目录则新建)。 - 选中dll,在Unity Inspector面板配置:
- 勾选iOS和Android的平台兼容性;
- 将Allow unsafe code设为
true(NodaTime部分功能依赖unsafe代码); - 确保Include in build处于勾选状态。
2. 添加IL2CPP链接器配置文件
IL2CPP的链接器会自动裁剪未直接引用的代码,需通过配置文件保留NodaTime的全部代码:
- 在
Assets/Plugins目录下新建linker.xml文件,内容如下:<linker> <assembly fullname="NodaTime" preserve="all" /> <!-- 若使用JSON序列化,添加下面一行 --> <assembly fullname="NodaTime.Serialization.JsonNet" preserve="all" /> </linker>
3. 配置Unity项目的.NET兼容性
- 打开Unity的
Edit > Project Settings > Player > Other Settings > Configuration:- 将Api Compatibility Level设置为
.NET Standard 2.1(NodaTime 3.x原生支持该标准); - 确认Scripting Backend为
IL2CPP,并根据目标平台设置正确架构(iOS选ARM64,Android选ARMv7/ARM64)。
- 将Api Compatibility Level设置为
4. 清理原有无效引用
- 在Visual Studio中卸载通过NuGet安装的NodaTime包,删除项目根目录的
packages文件夹,重启Unity让项目文件自动同步,确保无残留的NodaTime引用。
关键注意事项
- 不要同时保留NuGet安装的包和手动导入的dll,避免出现引用冲突;
- 先在Unity编辑器中测试时区转换代码,确认无报错后再进行平台构建;
- 若iOS构建仍有问题,检查Xcode项目中的
Other Linker Flags,确保未添加干扰NodaTime的参数。
内容的提问来源于stack exchange,提问作者Fausto
相关产品推荐
相关产品推荐

