我在 Linux 上使用 .NET Core 和 C#,并且缺少库 *System.Drawing*

问题描述 投票:0回答:6

错误信息

Program.cs(1,14):错误CS0234:类型或命名空间名称“Drawing” 命名空间“System”中不存在(您是否缺少程序集 参考?

可以解决这个问题吗?或者如果我在 Linux 上使用 C# 进行开发,我并不打算使用这个库?

c# .net-core system.drawing .net-standard
6个回答
17
投票

2021:

引自 System.Drawing.Common 仅在 Windows 上受支持,建议操作

要将这些 API 用于跨平台应用程序,请迁移到以下库之一:

  • 图像锐利
  • SkiaSharp
  • 微软.毛伊岛.图形

您可以短期使用 System.Drawing,但请注意没有支持。

或者,您可以通过在 runtimeconfig.json 文件中将 System.Drawing.EnableUnixSupport 运行时配置开关设置为 true 来启用对非 Windows 平台的支持:

添加此配置开关是为了让严重依赖此包的跨平台应用程序有时间迁移到更现代的库。但是,非 Windows 错误不会得到修复。此外,我们可能会在未来版本中完全删除对非 Windows 平台的支持,即使您使用运行时配置开关启用它也是如此。

为了能够在 Linux 计算机上使用 System.Drawing,您可能还需要安装

libgdiplus
,如 @saman-azadi 和 @alex-from-jitbit 所提到的。


2017:

System.Drawing
命名空间目前不是 corefx 的一部分,因为它依赖于 Windows 的 GDI+ 功能。

但是未来有计划支持它。


但是有多种选择:

CoreCompat.System.Drawing

CoreCompat.System.Drawing 是 System.Drawing Mono 实现的 .NET Core 端口。与 .NET Framework 和 Mono 中的 System.Drawing 一样,CoreCompat.System.Drawing 也依赖于 Windows 上的 GDI+。因此,出于同样的原因,建议谨慎行事。

图像锐利

ImageSharp 是一个全新的、纯托管代码、跨平台的图像处理库。它的性能不如依赖本机操作系统特定依赖项的库,但仍然非常合理。它唯一的依赖项是 .NET 本身,这使得它非常便携:无需安装额外的包,只需引用 ImageSharp 本身,就完成了。

Magick.NET

Magick.NET 是流行的 ImageMagick 库的 .NET 包装器。 ImageMagick 是一个开源、跨平台的库,专注于图像质量,并提供多种支持的图像格式选择。它还具有与 ImageSharp 相同的 EXIF 支持。

(Magick.NET 的 .NET Core 版本目前仅支持 Windows。)

SkiaSharp

SkiaSharp 是 Google Skia 跨平台 2D 图形库的 .NET 包装器,由 Xamarin 团队维护。 SkiaSharp 现在与 .NET Core 兼容,并且速度非常快。

FreeImage-dotnet-core

这个库对于原生 FreeImage 库来说就像 Magick.NET 对于 ImageMagick 一样:一个 .NET Core 包装器。它提供了很好的图像格式选择、良好的性能和良好的视觉质量。


这里是上述库的一些很好的示例和性能分析。


6
投票

在命令行运行以下命令

sudo apt-get install libgdiplus

sudo yum install -y libgdiplus-2.10-9.el7.x86_64

3
投票

Microsoft 发布了 System.Drawing.Common,它也可以在 Linux 上运行。

更新:他们决定在 .NET 6 中使其“仅限 Windows”。该包将显示编译警告,因为它依赖于

libgdiplus
,而某些 Linux 发行版上可能不存在。请参阅 System.Drawing.Common 仅在 Windows 上受支持

在尝试了多种替代方案之后,在尝试了 ImageSharp(慢,memleaks)SkiaSharp(非托管代码)和 ImageMagick(非托管代码)等多个库后,我们已切换到 PhotoSauce(我不隶属,只是建议)


0
投票

对于那些尝试在 Linux 上使用 System.Drawing 的人:

libgdiplus 在 Linux 上会导致严重的内存泄漏(我在 Ubuntu 20.04 (Focal Fossa) 上尝试过),不应该使用(在此处找到)。

ImageSharp 努力使用本机代码(传递内存指针),OpenCvSharp4 成为我的最终选择。


0
投票

我正在运行 Ubuntu Linux,并且遇到了同样的问题。不过我成功了。我发现使用 mono 编译器编译时需要 -pkg:dotnet,尽管使用 Microsoft 编译器时不需要。

C_Sharp_mono:
    mcs main.cs -pkg:dotnet && mono main.exe
C_Sharp_csc:
    csc main.cs && mono main.exe

-2
投票

您可以使用 Aspose.Drawing 库——完全托管且跨平台的 System.Drawing 的直接替代品。 (我是开发人员之一。)

© www.soinside.com 2019 - 2024. All rights reserved.