.NET MAUI Blazor安卓平台:静态类如何访问wwwroot中的图片?
解决MAUI Blazor安卓平台访问wwwroot文件的问题
核心原因
Windows平台下AppDomain.CurrentDomain.BaseDirectory指向应用安装目录,wwwroot文件直接存放在此路径下;但安卓平台中,wwwroot的默认MauiAsset资源会被打包到APK的只读assets目录,无法通过常规文件路径直接访问,且AppDomain.CurrentDomain.BaseDirectory指向的应用私有目录与assets目录不重叠,因此会出现文件找不到的错误。
解决方案步骤
1. 调整资源生成属性
在MAUI项目中找到wwwroot下的目标文件(比如img/proxiwash_black.jpg),右键打开「属性」:
- 将生成操作设置为
Embedded Resource - 将复制到输出目录设置为
如果较新则复制
2. 编写跨平台资源访问代码
通过读取嵌入资源并复制到应用可写目录,实现文件形式访问:
using System.Reflection; using Microsoft.Maui.Storage; public async Task<string> GetLocalFilePath(string relativePath) { // 拼接嵌入资源完整名称,需替换为你的项目命名空间 var resourceName = $"YourProjectNamespace.wwwroot.{relativePath.Replace('/', '.')}"; var localPath = Path.Combine(FileSystem.AppDataDirectory, relativePath); // 本地文件不存在时,从嵌入资源复制 if (!File.Exists(localPath)) { using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName); using var fileStream = new FileStream(localPath, FileMode.Create); await stream.CopyToAsync(fileStream); } return localPath; }
3. 调用方法获取有效文件路径
替换原有路径获取逻辑:
// 替换原rootpath和logoPath的写法 var logoLocalPath = await GetLocalFilePath("img/proxiwash_black.jpg"); // 此时logoLocalPath可直接作为文件路径使用,例如File.Open(logoLocalPath, FileMode.Open)
简化方案(仅用于Blazor页面显示图片)
如果只是在Blazor页面中展示图片,无需直接以文件形式访问,可直接使用相对路径:
<img src="img/proxiwash_black.jpg" alt="Logo" />
Blazor会自动处理跨平台的资源寻址,无需手动拼接物理路径。
内容的提问来源于stack exchange,提问作者N. OZER SENOL
相关产品推荐
相关产品推荐

