码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何在 .NET MAUI 中加载 json 文件?


    引言:

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

    资源文件夹
    1. 官方工程 Resources\Raw\文件夹 AboutAssets.txt 文件说明
    您希望与应用程序一起部署的任何原始资产都可以放置在此目录(和子目录)。 将资产部署到您的应用程序, 由 `.csproj` 中的以下 `MauiAsset` 构建操作自动处理。
    
         
    
    这些文件将与您的包一起部署,并且可以使用 Essentials 访问:
    
        async Task LoadMauiAsset()
        {
            using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");
            using var reader = new StreamReader(stream);
    
            var contents = reader.ReadToEnd();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    复制一份txt文件按操作复现成功.

    1. 直接丢入 appsettings.json 编译到ios平台提示错误不能复制 json 文件到目录, 经google,找到方案,需要项目文件属性中 Remove 文件

    相关错误提示

    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.

    最终方案:

    • appsettings.json文件直接放工程根目录
    • 文件属性生成操作为 MauiAsset 和 不复制
    • 需要在项目属性中 Remove 文件

    项目文件

        
          
        
         
        
        
          
            Never
          
         
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    读取配置文件代码

            async static Task LoadMauiAsset()
            {
                try
                {
    
                    using var stream = await FileSystem.OpenAppPackageFileAsync("appsettings.json");
                    using var reader = new StreamReader(stream);
    
                    var contents = reader.ReadToEnd();
                    Console.WriteLine("OpenAppPackageFileAsync => " + contents);
                    return stream;
                }
                catch (Exception e)
                {
                    Console.WriteLine("OpenAppPackageFileAsync Exception => " + e.Message);
                }
                return null;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    附加到 builder.Configuration

    var stream = LoadMauiAsset().Result; 
    builder.Configuration.AddJsonStream(stream);
    
    • 1
    • 2
    附:使用内置资源方式

    需要在项目属性中设置生成操作为嵌入资源

    
      
    
    
    • 1
    • 2
    • 3

    代码 BlazorMaui 为工程名

    var a = Assembly.GetExecutingAssembly();
    using var stream = a.GetManifestResourceStream("BlazorMaui.appsettings.json");
    builder.Configuration.AddJsonStream(stream);
    
    • 1
    • 2
    • 3
    项目地址

    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

  • 相关阅读:
    通往优秀软件架构师之路:掌握技术核心,修炼基础原理【文中送书,十本任选】
    【从零开始学习 SystemVerilog】2.1、SystemVerilog 数据类型——概述
    redux-thunk 简单案例,优缺点和思考
    通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验
    基于VTD自带的场景 进行场景搭建
    SpringBoot源码解读与原理分析(三十六)SpringBoot整合WebMvc(一)@Controller控制器装配原理
    [机缘参悟-31]:鬼谷子-抵巇[xī]篇-危机是危险与机会并存
    聊聊消息中间件(1),AMQP那些事儿
    02.jvmClass文件结构
    DM8:单库单实例搭建本地数据守护服务
  • 原文地址:https://blog.csdn.net/alex_zoucn/article/details/127890071
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号