如何在 .NET MAUI 中加载 json 文件?

引言:

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

bec587fbc798ec003e5215854a5d3770.png

资源文件夹

  1. 官方工程 Resources\Raw\文件夹 AboutAssets.txt 文件说明

您希望与应用程序一起部署的任何原始资产都可以放置在此目录(和子目录)。将资产部署到您的应用程序, 由 `.csproj` 中的以下 `MauiAsset` 构建操作自动处理。<MauiAsset Include="Resources\Raw\**" LogicalName="%(RecursiveDir)%(Filename)%(Extension)" />这些文件将与您的包一起部署,并且可以使用 Essentials 访问:async Task LoadMauiAsset(){using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt");using var reader = new StreamReader(stream);var contents = reader.ReadToEnd();}

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

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

相关错误提示

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 文件

cb46bf168b78a034cfa33a5b70be5d8d.png

项目文件

<ItemGroup><Content Remove="appsettings.json" /></ItemGroup><ItemGroup><MauiAsset Include="appsettings.json"><CopyToOutputDirectory>Never</CopyToOutputDirectory></MauiAsset></ItemGroup>

读取配置文件代码

async static Task<Stream> 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;}

附加到 builder.Configuration

var stream = LoadMauiAsset().Result; 
builder.Configuration.AddJsonStream(stream);

附:使用内置资源方式

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

<ItemGroup><EmbeddedResource Include="appsettings.json" />
</ItemGroup>

代码 BlazorMaui 为工程名

var a = Assembly.GetExecutingAssembly();
using var stream = a.GetManifestResourceStream("BlazorMaui.appsettings.json");
builder.Configuration.AddJsonStream(stream);

项目地址

https://github.com/densen2014/BlazorMaui

https://gitee.com/densen2014/BlazorMaui

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/281122.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSH整合注解版(Spring+Struts2+Hibernate)

整体架构&#xff1a; pom.xml 引入maven节点&#xff1a; <dependencies><!--单测--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.3</version><scope>test</scope><…

定时插座动一下就断_使用插座定时器在某些时候自动将您的Amazon Echo静音

定时插座动一下就断The Amazon Echo is an always-listening voice-controlled virtual assistant, but if there are times you’d rather not listen (or be listened to) by the Echo, here’s how to automatically mute it at certain times of the day. Amazon Echo是一个…

周末读书:《红楼梦》

【周末读书】| 作者/Edison大家好&#xff0c;我是Edison。古人曾说“开谈不说红楼梦&#xff0c;读尽诗书也枉然”&#xff0c;刚好最近我爸开始在阅读《红楼梦》&#xff0c;我想起当年看了两遍《红楼梦》原著和一遍87版《红楼梦》电视剧的场景。本文是我首发于2018年的一篇读…

onlyoffice启用HTTPS

原文同步自作者博客&#xff1a;https://www.daxueyiwu.com/post/765 HTTPS需要使用SSL证书&#xff0c;可以自己签发也可以用ca机构签发的&#xff0c;加密效果相同。 生成证书&#xff1a; 创建私钥 openssl genrsa -out onlyoffice.key 2048 创建CSR openssl req -new -k…

Oracle-逻辑体系结构

这里指数据文件的逻辑体系结构&#xff0c;包括1.表空间(TABLESPACE) 2.段(SEGMENT) 3.区(EXTENT) 4.块(BLOCK) 数据库(Database)由若干表空间(TABLESPACE)组成&#xff0c;表空间由若干段(SEGMENT)组成&#xff0c;段由若干区(EXTENT)组成&#xff0c;区由若干块(BLOCK)组成…

chromebook刷机_如何从Chromebook上的APK侧面加载Android应用

chromebook刷机Chromebooks can now download and install Android apps from Google Play, and it works pretty well. But not every Android app is available in Google Play. Some apps are available from outside Google Play as APK files, and you can install them o…

修改onlyoffice存储为手动存储关闭浏览器时不进行保存

原文同步自作者博客&#xff1a;https://www.daxueyiwu.com/post/704 相关官方API地址&#xff1a; 文件保存 回调处理程序 配置-编辑-定制-自动保存 配置-编辑-定制-forcesave 需要将: config.editorConfig.customization.forcesave改为true, 并且config.editorConfig.…

如何使用NVIDIA ShadowPlay录制PC游戏

NVIDIA’s ShadowPlay, now known as NVIDIA Share, offers easy gameplay recording, live streaming, and even an FPS counter overlay. It can automatically record gameplay in the background–just on the PlayStation 4 and Xbox One–or only record gameplay when y…

Java流

流分类 字节流字符流输入流InputStreamReader输出流OutputStream WriterInputStream:BufferedInputStream、DataInputStream、ObjectInputStreamOutputStream:BufferedOutputStream、DataOutputStream、ObjectOutputStream、PrintStream 标准流: System.in 、Syst…

Win7安装OnlyOffice(不使用Docker)

原文同步自作者博客&#xff1a;https://www.daxueyiwu.com/post/741 1、安装准备 &#xff08;1&#xff09;安装Elang&#xff1a; 【注意事项】 a)Elang是为了给RabbitMQ使用的&#xff0c;因此在安装Elang之前应确定RabbitMQ的版本及其所需的Elang版本。RabbitMQ的地址…

geek_享受How-To Geek用户样式脚本的好处

geekMost people may not be aware of it but there are two user style scripts that have been created just for use with the How-To Geek website. If you are curious then join us as we look at these two scripts at work. 大多数人可能不知道它&#xff0c;但是已经创…

Memcached 在linux上安装笔记

第一种yum 方式安装 Memcached 支持许多平台&#xff1a;Linux、FreeBSD、Solaris、Mac OS&#xff0c;也可以安装在Windows上。 第一步 Linux系统安装memcached&#xff0c;首先要先安装libevent库 Ubuntu/Debian sudo apt-get install libevent libevent-deve 自动下…

onlyoffice回调函数controller方式实现

原文同步自作者博客&#xff1a;https://www.daxueyiwu.com/post/706 springboot实现的onlyoffice协同编辑网盘项目可以去作者博客。 上代码&#xff1a; //新建报告GetMapping("report/createReport")public String CreatReport(HttpServletRequest request,Stri…

读Bilgin Ibryam 新作 《Dapr 是一种10倍数 平台》

Bilgin Ibryam 最近加入了开发者软件初创公司Diagrid Inc&#xff0c;他是Apache Software Foundation 的 committer 和成员。他也是一个开源的布道师&#xff0c;并且是书籍 Kubernetes设计模式 和 Camel Design Patterns 的作者。早在2020年初 提出的Multi-Runtime Microserv…

如何在iPhone或iPad上使用Safari下载文件

Khamosh PathakKhamosh PathakIn your work or personal life, you’ll sometimes need to download a file on your iPhone or iPad. Using the new feature introduced in iOS 13 and iPadOS 13, you can now do this directly in Safari. No third-party app needed! 在工作…

java版左右手桌面盯盘软件dstock V1.0

V1.0功能比较简陋&#xff0c;先满足自己桌面盯盘需要 V1.0 版本功能介绍&#xff1a; 1. 1s实时刷新盯盘数据 主要市面上的&#xff0c;符合我要求的桌面应用要VIP,穷啊&#xff0c;还是月月付&#xff0c;年年付&#xff0c;还是自己搞吧&#xff01; 2. 配置文件配置股票…

放大倍数超5万倍的Memcached DDoS反射攻击,怎么破?

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 作者&#xff1a;腾讯游戏云 背景&#xff1a;Memcached攻击创造DDoS攻击流量纪录 近日&#xff0c;利用Memcached服务器实施反射DDoS攻击的事件呈大幅上升趋势。DDoS攻击流量首次过T&#xff0c;引发业界热…

C# WPF TabControl控件用法详解

概述TabControl我之前有讲过一节&#xff0c;内容详见&#xff1a;C# WPF TabControl用法指南(精品)&#xff0c;上节主要讲解了tabcontrol控件的左右翻页&#xff0c;以及页面筛选&#xff0c;以及数据绑定等内容&#xff0c;这节内容继续接续上节内容进行扩展讲解&#xff0c…

pixel 解锁_如何在Google Pixel 4和Pixel 4 XL上禁用面部解锁

pixel 解锁Justin Duino贾斯汀杜伊诺(Justin Duino)Face Unlock is one of the Google Pixel 4 and Pixel 4 XL’s flagship features. But if the facial recognition is a form of biometric security you’re uncomfortable with, you can delete your face data right off …

【实战】将多个不规则多级表头的工作表合并为一个规范的一维表数据结果表...

最近在项目里&#xff0c;有个临时的小需求&#xff0c;需要将一些行列交叉结构的表格进行汇总合并&#xff0c;转换成规范的一维表数据结构进行后续的分析使用。从一开始想到的使用VBA拼接字符串方式&#xff0c;完成PowerQuery的M语言查询字符串&#xff0c;然后转换成使用插…