.NET Core中使用System.Drawing处理图像
2022-11-01
2288 0将.NET Framework的代码迁移到.NET Core的时候发现System.Drawing命名空间下的代码编译会报错。从官网查看到需要安装System.Drawing.Common包,我安装的时候最新版本是6.0.0。
安装完成后原来的代码可以正常编译了。但是会有下划线警告,提示: warning CA1416: This call site is reachable on all platforms. 'Image.FromStream(Stream)' is only supported on: 'windows'.
https://learn.microsoft.com/zh-CN/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only
根据官方文档来看,System.Drawing.Common NuGet 包现在被归为 Windows 特定的库。 在为非 Windows 操作系统编译时,平台分析器会在编译时发出警告。
在.NET 6中,由于 System.Drawing.Common 被设计为 Windows 技术的精简包装器,因此其跨平台实现欠佳。
微软官方提供了建议的操作:
若要将这些 API 用于跨平台应用,请迁移到以下库之一:
SkiaSharp
Microsoft.Maui.Graphics
或者,可通过将 runtimeconfig.json文件中的System.Drawing.EnableUnixSupport运行时配置开关设置为 true 来启用对.NET 6中非Windows 平台的支持:
runtimeconfig.template.json 模板文件:
{
"configProperties":
{
"System.Drawing.EnableUnixSupport": true
}
}
[appname].runtimeconfig.json 输出文件:
{
"runtimeOptions":
{
"configProperties":
{
"System.Drawing.EnableUnixSupport": true
}
}
}
备注:
添加此配置开关是为了让严重依赖此包的跨平台应用有时间迁移到更新式的库。 但是,不会修复非 Windows bug。
此开关仅在 .NET 6 中可用。
关联文章:.NET Core SkiaSharp替代System.Drawing的用法
您可能感兴趣:
阿里云 云服务器 99元1年 2核2G 3M固定带宽 续费与新购同价
领取 通义灵码 免费使用资格 兼容 Visual Studio Code、Visual Studio、JetBrains IDEs 等主流编程工具, 为你提供高效、流畅、舒心的智能编码体验!