.NET MAUI中SVG转PNG后图片找不到,求问存储路径
解决.NET MAUI中SVG转PNG后资源找不到的问题
问题根源
.NET MAUI在编译时会将SVG文件转换为对应平台的原生资源格式(比如Android的Drawable、iOS的Image Asset),不会将转换后的PNG作为独立文件存放在应用包中,所以你用FileSystem.Current.OpenAppPackageFileAsync找不到mpte.png——这个文件根本不存在于包文件系统里。另外你的ToImageSource方法逻辑也有问题:它把文件当成Base64文本读取,但转换后的资源不是Base64格式的文本文件。
修正方案
1. 确保SVG文件的生成操作设置正确
在Visual Studio中右键你的SVG文件(比如mpte.svg),选择属性:
- 把"生成操作"设置为
MauiImage(这是.NET MAUI处理图像资源的专用设置,会自动处理SVG转平台格式) - "复制到输出目录"设置为"不复制"即可
2. 修改图像加载逻辑
不需要自己写复杂的流处理,直接用.NET MAUI内置的跨平台资源加载方式:
- 若在XAML中绑定,直接写
ImageSource="mpte.svg"即可,框架会自动识别并加载转换后的资源 - 若需在代码中生成
ImageSource,用ImageSource.FromResource方法,注意要包含项目命名空间:
public static ImageSource ToImageSource(this string resourceName) { try { // 替换成你的项目根命名空间,比如"MySimpleMauiApp" string fullResourceName = $"你的项目命名空间.{resourceName}"; return ImageSource.FromResource(fullResourceName); } catch (Exception e) { Console.WriteLine(e.Message); throw; } }
3. 额外注意事项
- 不要手动传入
mpte.png,直接用原SVG文件名mpte.svg即可,.NET MAUI会自动处理转换逻辑 - 如果图像放在子文件夹里,资源名要包含路径,比如
Images.mpte.svg(对应Images文件夹下的文件)
内容的提问来源于stack exchange,提问作者Nodoid
相关产品推荐
相关产品推荐

