You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 11:49:56