雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

.NET Core中使用System.Drawing处理图像

2024-10-14 20

将.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的用法

更新于:4天前
赞一波!

文章评论

评论问答