Windows 11下System.Drawing.Common报PlatformNotSupportedException求助
解决Windows 11下System.Drawing.Common平台不支持的问题
方案一:配置项目启用Windows专属框架(适用于.NET 6+)
在项目的.csproj文件中修改目标框架为Windows专属版本,同时启用Windows Forms支持:
<PropertyGroup> <TargetFramework>net6.0-windows</TargetFramework> <!-- 若使用.NET 7/8,对应改为net7.0-windows/net8.0-windows --> <UseWindowsForms>true</UseWindowsForms> </PropertyGroup>
如果不需要Windows Forms,也可以指定运行时标识来限定Windows平台:
<PropertyGroup> <RuntimeIdentifier>win-x64</RuntimeIdentifier> <!-- 可根据系统架构替换为win-x86或win-arm64 --> </PropertyGroup>
方案二:删除无效的开关配置
你添加的AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);是针对Linux、macOS等非Windows平台的兼容开关,在Windows系统下完全无效,直接删除该行代码即可。
方案三:替换为跨平台图像库(长期推荐)
如果有跨平台需求,或不想受System.Drawing的平台限制,可改用以下成熟的替代库:
- ImageSharp:纯.NET编写的跨平台图像库,API简洁,支持所有主流图像格式
- SkiaSharp:Google Skia图形引擎的.NET绑定,性能优异,支持复杂图形操作
以ImageSharp加载并编辑PNG的示例代码:
using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; // 加载PNG文件 using var image = Image.Load<Rgba32>(file); // 执行编辑操作(示例:调整图片大小) image.Mutate(x => x.Resize(200, 200)); // 保存修改后的文件 image.Save("output.png");
报错原因说明
从.NET 6开始,微软将System.Drawing.Common标记为Windows专属库。即使在Windows系统上,若项目目标框架是通用的net6.0(而非Windows专属的net6.0-windows),运行时会默认禁用该库的支持,从而抛出PlatformNotSupportedException。
内容的提问来源于stack exchange,提问作者PS Jahn
相关产品推荐
相关产品推荐

