.NetStandard 2.0类库Resx文件未部署:UWP异常Android正常求解决
解决方案:UWP中无法加载.NetStandard类库的非默认语言resx资源
我来帮你排查这个UWP特有的资源加载问题,结合.NetStandard类库的特性,给你几个针对性的解决方向:
检查资源访问代码的命名空间正确性
UWP对嵌入式资源的路径识别很严格,确保你用ResourceManager实例化时的命名空间和resx文件的完整命名空间完全一致。比如你的类库命名空间是MySharedResources,resx文件在根目录,那代码应该是:var resourceManager = new ResourceManager("MySharedResources.MobileDictionary", typeof(SomeClassInLibrary).Assembly); var localizedValue = resourceManager.GetString("YourResourceKey", targetCulture);很多时候问题就出在命名空间写错,导致只能找到默认的en资源。
确认UWP项目的语言声明
打开UWP项目的Package.appxmanifest,到「应用程序」标签页:- 检查「默认语言」是否和你的预期一致;
- 务必把需要加载的语言添加到「语言」列表里——UWP只会加载manifest中声明过的语言资源,哪怕类库里有对应的resx文件,没声明的话也会被忽略。
核对resx文件的生成配置与命名规范
虽然你调整了复制属性,但还要检查所有MobileDictionary的附属资源文件(比如MobileDictionary.zh-CN.resx):- 确保它们的生成操作都是
Embedded Resource; - 命名必须严格遵循
[基文件名].[语言代码].resx的格式,不能用下划线或者其他分隔符; - 右键类库项目→编辑
.csproj文件,确认附属resx文件的节点有<DependentUpon>关联基文件,比如:
这个关联能让资源管理器正确识别它们是基资源的本地化版本。<EmbeddedResource Include="MobileDictionary.zh-CN.resx"> <DependentUpon>MobileDictionary.resx</DependentUpon> </EmbeddedResource>
- 确保它们的生成操作都是
清理重建解决缓存问题
UWP的资源缓存偶尔会导致旧资源残留,建议:- 删除类库和UWP项目的
bin、obj文件夹; - 先重新生成类库,再生成UWP项目,确保所有资源都被正确嵌入和部署。
- 删除类库和UWP项目的
极端情况:手动加载资源流
如果以上方法都没用,可以尝试直接从程序集读取资源流:var libraryAssembly = typeof(SomeClassInLibrary).Assembly; var resourcePath = $"MySharedResources.MobileDictionary.{targetCulture.Name}.resx"; using (var stream = libraryAssembly.GetManifestResourceStream(resourcePath)) { if (stream != null) { var reader = new ResXResourceReader(stream); var resourceDict = reader.Cast<DictionaryEntry>() .ToDictionary(x => x.Key.ToString(), x => x.Value); // 从resourceDict中获取对应值 } }
内容的提问来源于stack exchange,提问作者MelloPs
相关产品推荐
相关产品推荐

