.NET MAUI iOS真机部署无法加载resx资源dll问题求助
.NET MAUI iOS实体设备本地化资源加载失败问题
问题描述
按步骤实现.NET MAUI本地化功能后,iOS模拟器运行正常,但部署到实体iPhone后切换语言功能失效,报错无法找到对应语言的TestApp.resources.dll:
Language is Traditional Chinese 2023-07-12 01:10:01.410 Xamarin.PreBuilt.iOS[645:115119] Could not resolve assembly TestApp.resources, Version=1.0.0.0, Culture=zh-TW, PublicKeyToken=null. Details: Could not load file or assembly '/var/mobile/Containers/Data/Application/1F073A32-D7F4-4009-81C6-D12526416BC2/Documents/TestApp.content/TestApp.resources.dll' or one of its dependencies. ...(其余重复报错省略) Language is English 2023-07-12 01:10:02.041 Xamarin.PreBuilt.iOS[645:115119] Could not resolve assembly TestApp.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null. Details: Could not load file or assembly '/var/mobile/Containers/Data/Application/1F073A32-D7F4-4009-81C6-D12526416BC2/Documents/TestApp.content/TestApp.resources.dll' or one of its dependencies. ...(其余重复报错省略)
实体设备的应用文件夹中未发现.resources.dll文件,资源dll未被正确部署到对应语言子目录。
解决方案
1. 检查资源文件的生成配置
- 右键项目中的
.resx文件,打开属性面板 - 将生成操作设置为
EmbeddedResource,自定义工具设置为ResXFileCodeGenerator - 确保所有语言对应的
.resx文件(如Resources.zh-TW.resx、Resources.en-US.resx)都按此配置设置
2. 调整iOS项目的部署与链接器配置
在项目的.csproj文件中添加以下配置,强制保留资源dll:
<PropertyGroup Condition="'$(TargetFramework)' == 'net7.0-ios'"> <MtouchLink>None</MtouchLink> </PropertyGroup>
注:
MtouchLink设为None是临时排查方案,后续可根据需求调整为SdkOnly,避免包体积过大,但需确认资源dll未被链接器误删。
3. 验证资源命名与目录结构
- 确保资源命名符合规范:基础资源为
Resources.resx,本地化资源命名格式为Resources.{CultureCode}.resx(如Resources.zh-TW.resx) - 编译后检查输出目录
bin/Release/net7.0-ios/ios-arm64/,确认存在对应语言的子目录(如zh-TW、en-US),且目录中包含TestApp.resources.dll
4. 清理重建项目
- 执行生成 -> 清理解决方案
- 删除项目根目录下的
bin和obj文件夹 - 重新生成解决方案并部署到实体设备
补充说明
iOS实体设备的资源部署逻辑与模拟器存在差异,链接器可能会移除未被直接引用的资源dll,通过上述配置可强制保留这些文件,确保本地化功能正常运行。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

