如何在WPF与MAUI两类.NET项目间共享图片资源?
单个图片库兼容WPF和.NET MAUI方案
完全可以用单个多目标程序集实现,不用复制图片文件。核心是修改Core.Images.csproj,添加多目标框架支持,并针对不同平台配置资源嵌入规则。
步骤1:修改项目目标框架
将原单一的net6.0-windows扩展为包含MAUI所需目标框架的多目标配置,同时为不同框架设置专属属性:
<PropertyGroup> <!-- 多目标框架:WPF + MAUI各平台 --> <TargetFrameworks>net6.0-windows;net6.0-android;net6.0-ios;net6.0-maccatalyst;net6.0-windows10.0.19041.0</TargetFrameworks> <!-- WPF专属配置 --> <UseWpf Condition="'$(TargetFramework)' == 'net6.0-windows'">true</UseWpf> <!-- MAUI专属配置 --> <EnableMauiSupport Condition="'$(TargetFramework)' != 'net6.0-windows'">true</EnableMauiSupport> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup>
注:如果你的MAUI项目用的是net7.0,对应把目标框架改成net7.0-xxx即可。
步骤2:分平台配置资源嵌入规则
WPF需要将图片设为Resource,MAUI则需要设为MauiImage(SVG同理)。通过条件判断为不同框架设置资源类型:
<!-- WPF资源配置 --> <ItemGroup Condition="'$(TargetFramework)' == 'net6.0-windows'"> <Resource Include="PNG\*.png" /> <Resource Include="SVG\*.svg" /> </ItemGroup> <!-- MAUI资源配置 --> <ItemGroup Condition="'$(TargetFramework)' != 'net6.0-windows'"> <MauiImage Include="PNG\*.png" /> <MauiImage Include="SVG\*.svg" /> <!-- 如果SVG需要特殊处理,可添加额外属性,比如: --> <!-- <MauiImage Include="SVG\*.svg" BaseResourceID="SvgImages" /> --> </ItemGroup>
步骤3:不同平台的资源访问方式
- WPF端:继续使用原pack URI格式:
var logoUri = new Uri("pack://application:,,,/Core.Images;component/PNG/Image2.png"); - MAUI端:利用MAUI的资源访问API,注意资源命名空间要和程序集匹配:
// PNG图片 var pngImage = ImageSource.FromResource("Core.Images.PNG.Image1.png", typeof(Core.Images.AssemblyMarker).Assembly); // SVG图片(若使用DevExpress MAUI,可直接用SvgImageSource) var svgImage = new DevExpress.Maui.Svg.SvgImageSource() { Resource = "Core.Images.SVG.Image1.svg" };
注:可以在Core.Images库中添加一个空类AssemblyMarker,方便获取程序集对象。
额外注意事项
- SVG在MAUI中的支持:如果需要渲染SVG,MAUI原生需要依赖第三方库(如
Microsoft.Maui.Graphics.Svg),如果用DevExpress MAUI控件,直接引用DevExpress.Maui.Svg即可。 - 版本一致性:确保库的目标框架版本和WPF、MAUI主应用的版本完全匹配,避免兼容性问题。
内容的提问来源于stack exchange,提问作者E4est
相关产品推荐
相关产品推荐

