ToB企服应用市场:ToB评测及商务社交产业平台

标题: 如何在 .NET MAUI 中加载 json 文件? [打印本页]

作者: 张国伟    时间: 2022-11-15 02:32
标题: 如何在 .NET MAUI 中加载 json 文件?
引言:

按core传统方式添加 AddJsonFile("appsettings.json") 在windows平台和ssr工作正常,但是在 ios 和 android 无法用这种方式,因为资源生成方式不一样. 使用内置资源方式不够灵活而且 ios 平台会提示不能复制 json 文件到目录,于是进行了几天的研究,终于能正确使用了.

资源文件夹

  1. 您希望与应用程序一起部署的任何原始资产都可以放置在此目录(和子目录)。 将资产部署到您的应用程序, 由 `.csproj` 中的以下 `MauiAsset` 构建操作自动处理。
  2. <ItemGroup>
  3.   <EmbeddedResource Include="appsettings.json" />
  4. </ItemGroup><ItemGroup>
  5.   <EmbeddedResource Include="appsettings.json" />
  6. </ItemGroup> <MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />
  7. 这些文件将与您的包一起部署,并且可以使用 Essentials 访问:
  8. <ItemGroup>
  9.   <EmbeddedResource Include="appsettings.json" />
  10. </ItemGroup><ItemGroup>
  11.   <EmbeddedResource Include="appsettings.json" />
  12. </ItemGroup>async Task LoadMauiAsset()
  13. <ItemGroup>
  14.   <EmbeddedResource Include="appsettings.json" />
  15. </ItemGroup><ItemGroup>
  16.   <EmbeddedResource Include="appsettings.json" />
  17. </ItemGroup>{
  18. <ItemGroup>
  19.   <EmbeddedResource Include="appsettings.json" />
  20. </ItemGroup><ItemGroup>
  21.   <EmbeddedResource Include="appsettings.json" />
  22. </ItemGroup><ItemGroup>
  23.   <EmbeddedResource Include="appsettings.json" />
  24. </ItemGroup><ItemGroup>
  25.   <EmbeddedResource Include="appsettings.json" />
  26. </ItemGroup>using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
  27. <ItemGroup>
  28.   <EmbeddedResource Include="appsettings.json" />
  29. </ItemGroup><ItemGroup>
  30.   <EmbeddedResource Include="appsettings.json" />
  31. </ItemGroup><ItemGroup>
  32.   <EmbeddedResource Include="appsettings.json" />
  33. </ItemGroup><ItemGroup>
  34.   <EmbeddedResource Include="appsettings.json" />
  35. </ItemGroup>using var reader = new StreamReader(stream);
  36. <ItemGroup>
  37.   <EmbeddedResource Include="appsettings.json" />
  38. </ItemGroup><ItemGroup>
  39.   <EmbeddedResource Include="appsettings.json" />
  40. </ItemGroup><ItemGroup>
  41.   <EmbeddedResource Include="appsettings.json" />
  42. </ItemGroup><ItemGroup>
  43.   <EmbeddedResource Include="appsettings.json" />
  44. </ItemGroup>var contents = reader.ReadToEnd();
  45. <ItemGroup>
  46.   <EmbeddedResource Include="appsettings.json" />
  47. </ItemGroup><ItemGroup>
  48.   <EmbeddedResource Include="appsettings.json" />
  49. </ItemGroup>}
复制代码
复制一份txt文件按操作复现成功.
相关错误提示
The path 'XXXXXXX\appsettings.json' would result in a file outside of the app bundle and cannot be used.
The path '..\..\..\..\..\..\..\Repos\BlazorMaui\BlazorMaui\appsettings.json' would result in a file outside of the app bundle and cannot be used.
最终方案:

项目文件
  1. <ItemGroup>
  2.   <EmbeddedResource Include="appsettings.json" />
  3. </ItemGroup><ItemGroup>
  4.   <EmbeddedResource Include="appsettings.json" />
  5. </ItemGroup><ItemGroup>
  6. <ItemGroup>
  7.   <EmbeddedResource Include="appsettings.json" />
  8. </ItemGroup><ItemGroup>
  9.   <EmbeddedResource Include="appsettings.json" />
  10. </ItemGroup><ItemGroup>
  11.   <EmbeddedResource Include="appsettings.json" />
  12. </ItemGroup><Content Remove="appsettings.json" />
  13. <ItemGroup>
  14.   <EmbeddedResource Include="appsettings.json" />
  15. </ItemGroup><ItemGroup>
  16.   <EmbeddedResource Include="appsettings.json" />
  17. </ItemGroup></ItemGroup>
  18. <ItemGroup>
  19.   <EmbeddedResource Include="appsettings.json" />
  20. </ItemGroup><ItemGroup>
  21.   <EmbeddedResource Include="appsettings.json" />
  22. </ItemGroup>
  23. <ItemGroup>
  24.   <EmbeddedResource Include="appsettings.json" />
  25. </ItemGroup><ItemGroup>
  26.   <EmbeddedResource Include="appsettings.json" />
  27. </ItemGroup>
  28. <ItemGroup>
  29.   <EmbeddedResource Include="appsettings.json" />
  30. </ItemGroup><ItemGroup>
  31.   <EmbeddedResource Include="appsettings.json" />
  32. </ItemGroup><ItemGroup>
  33. <ItemGroup>
  34.   <EmbeddedResource Include="appsettings.json" />
  35. </ItemGroup><ItemGroup>
  36.   <EmbeddedResource Include="appsettings.json" />
  37. </ItemGroup><ItemGroup>
  38.   <EmbeddedResource Include="appsettings.json" />
  39. </ItemGroup><MauiAsset Include="appsettings.json">
  40. <ItemGroup>
  41.   <EmbeddedResource Include="appsettings.json" />
  42. </ItemGroup><ItemGroup>
  43.   <EmbeddedResource Include="appsettings.json" />
  44. </ItemGroup><ItemGroup>
  45.   <EmbeddedResource Include="appsettings.json" />
  46. </ItemGroup><ItemGroup>
  47.   <EmbeddedResource Include="appsettings.json" />
  48. </ItemGroup><CopyToOutputDirectory>Never</CopyToOutputDirectory>
  49. <ItemGroup>
  50.   <EmbeddedResource Include="appsettings.json" />
  51. </ItemGroup><ItemGroup>
  52.   <EmbeddedResource Include="appsettings.json" />
  53. </ItemGroup><ItemGroup>
  54.   <EmbeddedResource Include="appsettings.json" />
  55. </ItemGroup></MauiAsset>
  56. <ItemGroup>
  57.   <EmbeddedResource Include="appsettings.json" />
  58. </ItemGroup><ItemGroup>
  59.   <EmbeddedResource Include="appsettings.json" />
  60. </ItemGroup></ItemGroup>
复制代码
读取配置文件代码
  1. <ItemGroup>
  2.   <EmbeddedResource Include="appsettings.json" />
  3. </ItemGroup><ItemGroup>
  4.   <EmbeddedResource Include="appsettings.json" />
  5. </ItemGroup><ItemGroup>
  6.   <EmbeddedResource Include="appsettings.json" />
  7. </ItemGroup><ItemGroup>
  8.   <EmbeddedResource Include="appsettings.json" />
  9. </ItemGroup>async static Task<Stream> LoadMauiAsset()
  10. <ItemGroup>
  11.   <EmbeddedResource Include="appsettings.json" />
  12. </ItemGroup><ItemGroup>
  13.   <EmbeddedResource Include="appsettings.json" />
  14. </ItemGroup><ItemGroup>
  15.   <EmbeddedResource Include="appsettings.json" />
  16. </ItemGroup><ItemGroup>
  17.   <EmbeddedResource Include="appsettings.json" />
  18. </ItemGroup>{
  19. <ItemGroup>
  20.   <EmbeddedResource Include="appsettings.json" />
  21. </ItemGroup><ItemGroup>
  22.   <EmbeddedResource Include="appsettings.json" />
  23. </ItemGroup><ItemGroup>
  24.   <EmbeddedResource Include="appsettings.json" />
  25. </ItemGroup><ItemGroup>
  26.   <EmbeddedResource Include="appsettings.json" />
  27. </ItemGroup><ItemGroup>
  28.   <EmbeddedResource Include="appsettings.json" />
  29. </ItemGroup><ItemGroup>
  30.   <EmbeddedResource Include="appsettings.json" />
  31. </ItemGroup>try
  32. <ItemGroup>
  33.   <EmbeddedResource Include="appsettings.json" />
  34. </ItemGroup><ItemGroup>
  35.   <EmbeddedResource Include="appsettings.json" />
  36. </ItemGroup><ItemGroup>
  37.   <EmbeddedResource Include="appsettings.json" />
  38. </ItemGroup><ItemGroup>
  39.   <EmbeddedResource Include="appsettings.json" />
  40. </ItemGroup><ItemGroup>
  41.   <EmbeddedResource Include="appsettings.json" />
  42. </ItemGroup><ItemGroup>
  43.   <EmbeddedResource Include="appsettings.json" />
  44. </ItemGroup>{
  45. <ItemGroup>
  46.   <EmbeddedResource Include="appsettings.json" />
  47. </ItemGroup><ItemGroup>
  48.   <EmbeddedResource Include="appsettings.json" />
  49. </ItemGroup><ItemGroup>
  50.   <EmbeddedResource Include="appsettings.json" />
  51. </ItemGroup><ItemGroup>
  52.   <EmbeddedResource Include="appsettings.json" />
  53. </ItemGroup><ItemGroup>
  54.   <EmbeddedResource Include="appsettings.json" />
  55. </ItemGroup><ItemGroup>
  56.   <EmbeddedResource Include="appsettings.json" />
  57. </ItemGroup><ItemGroup>
  58.   <EmbeddedResource Include="appsettings.json" />
  59. </ItemGroup><ItemGroup>
  60.   <EmbeddedResource Include="appsettings.json" />
  61. </ItemGroup>using var stream = await FileSystem.OpenAppPackageFileAsync("appsettings.json");
  62. <ItemGroup>
  63.   <EmbeddedResource Include="appsettings.json" />
  64. </ItemGroup><ItemGroup>
  65.   <EmbeddedResource Include="appsettings.json" />
  66. </ItemGroup><ItemGroup>
  67.   <EmbeddedResource Include="appsettings.json" />
  68. </ItemGroup><ItemGroup>
  69.   <EmbeddedResource Include="appsettings.json" />
  70. </ItemGroup><ItemGroup>
  71.   <EmbeddedResource Include="appsettings.json" />
  72. </ItemGroup><ItemGroup>
  73.   <EmbeddedResource Include="appsettings.json" />
  74. </ItemGroup><ItemGroup>
  75.   <EmbeddedResource Include="appsettings.json" />
  76. </ItemGroup><ItemGroup>
  77.   <EmbeddedResource Include="appsettings.json" />
  78. </ItemGroup>using var reader = new StreamReader(stream);
  79. <ItemGroup>
  80.   <EmbeddedResource Include="appsettings.json" />
  81. </ItemGroup><ItemGroup>
  82.   <EmbeddedResource Include="appsettings.json" />
  83. </ItemGroup><ItemGroup>
  84.   <EmbeddedResource Include="appsettings.json" />
  85. </ItemGroup><ItemGroup>
  86.   <EmbeddedResource Include="appsettings.json" />
  87. </ItemGroup><ItemGroup>
  88.   <EmbeddedResource Include="appsettings.json" />
  89. </ItemGroup><ItemGroup>
  90.   <EmbeddedResource Include="appsettings.json" />
  91. </ItemGroup><ItemGroup>
  92.   <EmbeddedResource Include="appsettings.json" />
  93. </ItemGroup><ItemGroup>
  94.   <EmbeddedResource Include="appsettings.json" />
  95. </ItemGroup>var contents = reader.ReadToEnd();
  96. <ItemGroup>
  97.   <EmbeddedResource Include="appsettings.json" />
  98. </ItemGroup><ItemGroup>
  99.   <EmbeddedResource Include="appsettings.json" />
  100. </ItemGroup><ItemGroup>
  101.   <EmbeddedResource Include="appsettings.json" />
  102. </ItemGroup><ItemGroup>
  103.   <EmbeddedResource Include="appsettings.json" />
  104. </ItemGroup><ItemGroup>
  105.   <EmbeddedResource Include="appsettings.json" />
  106. </ItemGroup><ItemGroup>
  107.   <EmbeddedResource Include="appsettings.json" />
  108. </ItemGroup><ItemGroup>
  109.   <EmbeddedResource Include="appsettings.json" />
  110. </ItemGroup><ItemGroup>
  111.   <EmbeddedResource Include="appsettings.json" />
  112. </ItemGroup>Console.WriteLine("OpenAppPackageFileAsync => " + contents);
  113. <ItemGroup>
  114.   <EmbeddedResource Include="appsettings.json" />
  115. </ItemGroup><ItemGroup>
  116.   <EmbeddedResource Include="appsettings.json" />
  117. </ItemGroup><ItemGroup>
  118.   <EmbeddedResource Include="appsettings.json" />
  119. </ItemGroup><ItemGroup>
  120.   <EmbeddedResource Include="appsettings.json" />
  121. </ItemGroup><ItemGroup>
  122.   <EmbeddedResource Include="appsettings.json" />
  123. </ItemGroup><ItemGroup>
  124.   <EmbeddedResource Include="appsettings.json" />
  125. </ItemGroup><ItemGroup>
  126.   <EmbeddedResource Include="appsettings.json" />
  127. </ItemGroup><ItemGroup>
  128.   <EmbeddedResource Include="appsettings.json" />
  129. </ItemGroup>return stream;
  130. <ItemGroup>
  131.   <EmbeddedResource Include="appsettings.json" />
  132. </ItemGroup><ItemGroup>
  133.   <EmbeddedResource Include="appsettings.json" />
  134. </ItemGroup><ItemGroup>
  135.   <EmbeddedResource Include="appsettings.json" />
  136. </ItemGroup><ItemGroup>
  137.   <EmbeddedResource Include="appsettings.json" />
  138. </ItemGroup><ItemGroup>
  139.   <EmbeddedResource Include="appsettings.json" />
  140. </ItemGroup><ItemGroup>
  141.   <EmbeddedResource Include="appsettings.json" />
  142. </ItemGroup>}
  143. <ItemGroup>
  144.   <EmbeddedResource Include="appsettings.json" />
  145. </ItemGroup><ItemGroup>
  146.   <EmbeddedResource Include="appsettings.json" />
  147. </ItemGroup><ItemGroup>
  148.   <EmbeddedResource Include="appsettings.json" />
  149. </ItemGroup><ItemGroup>
  150.   <EmbeddedResource Include="appsettings.json" />
  151. </ItemGroup><ItemGroup>
  152.   <EmbeddedResource Include="appsettings.json" />
  153. </ItemGroup><ItemGroup>
  154.   <EmbeddedResource Include="appsettings.json" />
  155. </ItemGroup>catch (Exception e)
  156. <ItemGroup>
  157.   <EmbeddedResource Include="appsettings.json" />
  158. </ItemGroup><ItemGroup>
  159.   <EmbeddedResource Include="appsettings.json" />
  160. </ItemGroup><ItemGroup>
  161.   <EmbeddedResource Include="appsettings.json" />
  162. </ItemGroup><ItemGroup>
  163.   <EmbeddedResource Include="appsettings.json" />
  164. </ItemGroup><ItemGroup>
  165.   <EmbeddedResource Include="appsettings.json" />
  166. </ItemGroup><ItemGroup>
  167.   <EmbeddedResource Include="appsettings.json" />
  168. </ItemGroup>{
  169. <ItemGroup>
  170.   <EmbeddedResource Include="appsettings.json" />
  171. </ItemGroup><ItemGroup>
  172.   <EmbeddedResource Include="appsettings.json" />
  173. </ItemGroup><ItemGroup>
  174.   <EmbeddedResource Include="appsettings.json" />
  175. </ItemGroup><ItemGroup>
  176.   <EmbeddedResource Include="appsettings.json" />
  177. </ItemGroup><ItemGroup>
  178.   <EmbeddedResource Include="appsettings.json" />
  179. </ItemGroup><ItemGroup>
  180.   <EmbeddedResource Include="appsettings.json" />
  181. </ItemGroup><ItemGroup>
  182.   <EmbeddedResource Include="appsettings.json" />
  183. </ItemGroup><ItemGroup>
  184.   <EmbeddedResource Include="appsettings.json" />
  185. </ItemGroup>Console.WriteLine("OpenAppPackageFileAsync Exception => " + e.Message);
  186. <ItemGroup>
  187.   <EmbeddedResource Include="appsettings.json" />
  188. </ItemGroup><ItemGroup>
  189.   <EmbeddedResource Include="appsettings.json" />
  190. </ItemGroup><ItemGroup>
  191.   <EmbeddedResource Include="appsettings.json" />
  192. </ItemGroup><ItemGroup>
  193.   <EmbeddedResource Include="appsettings.json" />
  194. </ItemGroup><ItemGroup>
  195.   <EmbeddedResource Include="appsettings.json" />
  196. </ItemGroup><ItemGroup>
  197.   <EmbeddedResource Include="appsettings.json" />
  198. </ItemGroup>}
  199. <ItemGroup>
  200.   <EmbeddedResource Include="appsettings.json" />
  201. </ItemGroup><ItemGroup>
  202.   <EmbeddedResource Include="appsettings.json" />
  203. </ItemGroup><ItemGroup>
  204.   <EmbeddedResource Include="appsettings.json" />
  205. </ItemGroup><ItemGroup>
  206.   <EmbeddedResource Include="appsettings.json" />
  207. </ItemGroup><ItemGroup>
  208.   <EmbeddedResource Include="appsettings.json" />
  209. </ItemGroup><ItemGroup>
  210.   <EmbeddedResource Include="appsettings.json" />
  211. </ItemGroup>return null;
  212. <ItemGroup>
  213.   <EmbeddedResource Include="appsettings.json" />
  214. </ItemGroup><ItemGroup>
  215.   <EmbeddedResource Include="appsettings.json" />
  216. </ItemGroup><ItemGroup>
  217.   <EmbeddedResource Include="appsettings.json" />
  218. </ItemGroup><ItemGroup>
  219.   <EmbeddedResource Include="appsettings.json" />
  220. </ItemGroup>}
复制代码
附加到 builder.Configuration
  1. var stream = LoadMauiAsset().Result;
  2. builder.Configuration.AddJsonStream(stream);
复制代码
附:使用内置资源方式

需要在项目属性中设置生成操作为嵌入资源
  1. <ItemGroup>
  2.   <EmbeddedResource Include="appsettings.json" />
  3. </ItemGroup>
复制代码
代码 BlazorMaui 为工程名
  1. var a = Assembly.GetExecutingAssembly();
  2. using var stream = a.GetManifestResourceStream("BlazorMaui.appsettings.json");
  3. builder.Configuration.AddJsonStream(stream);
复制代码
项目地址

https://github.com/densen2014/BlazorMaui
https://gitee.com/densen2014/BlazorMaui
关联项目

FreeSql QQ群:4336577、8578575、52508226
BA & Blazor QQ群:795206915、675147445
知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名AlexChow(包含链接: https://github.com/densen2014 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系
AlexChow

今日头条 | 博客园 | 知乎 | Gitee | GitHub

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4