返回

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

2022-11-01 .NET Core System.Drawing 1671 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固定带宽 续费与新购同价

DOVE 网络加速器免费试用

顶部