在.NET Core 2.2中的System.Drawing中找不到Image类

23

根据文档,在命名空间System.Drawing中应该有一个缩略图处理类。我想创建一个模型,其中包含一个图像属性,并将其保存到数据库中。但是,无论文档如何说明,当我尝试使用下面的代码时,都会出现在该命名空间中找不到该类的错误。

using System.Drawing;
public class Donkey
{
  public Image Image { get;set; }
}

我错过了什么?!

我已经搜索过,但只找到了一些旧帖子看起来无法正常工作的示例

2个回答

65

尝试安装System.Drawing.Common NuGet包。其中包含Image和其他相关类型,如Bitmap

PM> Install-Package System.Drawing.Common

您还可以使用NuGet包管理器UI进行安装,方法是右键单击“解决方案资源管理器”中的解决方案,然后选择“管理NuGet程序包...”

System.Drawing.Common

以下是@KonradViltersten的澄清评论:

传统上,System.Drawing 包含在完整的 .NET Framework 中, 但不包括在.NET Core 中,因为 System.Drawing 基于 Windows 绘图方法。 .NET core 被设计为平台无关的,因此不包括任何特定于平台的内容(如绘图)。 由于这种功能如此受欢迎,微软发布了一个单独的程序集,可以安装以提供该功能。


3
似乎有点随机,System.Drawing.Printing 默认存在,但 System.Drawing.Image 需要通过 NuGet 获取(新获取?通过 NuGet 获取?NuGet 获取?)... 另外,更清晰的文档会很有帮助。 - Konrad Viltersten
另外,我假设这是正确的管理图像的类,可以用 EF 直接将其存储到数据库中。我的假设正确吗? - Konrad Viltersten
1
不是很奇怪。System.Drawing.Common正如描述所说,提供了对GDI+图形的访问。这个功能必须从经典的.NET重写到.NET Core,并且不是.NET Core构建的一部分,而是扩展功能,因为.NET Core旨在是最小必要组件。我无法对.Printing命名空间发表评论,但这绝对是正确的。 - Zakk Diaz
@ErikFunkenbusch说得非常好。我可以建议您将您的评论复制为已接受答案的段落吗?这将使它更加出色。然后我们可以删除评论。 - Konrad Viltersten
一个指向微软原始公告的链接将会让它更加清晰明了 https://blogs.msdn.microsoft.com/dotnet/2017/11/16/announcing-the-windows-compatibility-pack-for-net-core/ - Lex Li
有点奇怪,直到 dotnet 8 我都没必要引入这个包。我只是使用 System.Drawing.Image.FromStream,但在 dotnet 7 中一直很顺利地没有用到它。很好奇发生了什么,但是添加它后问题都解决了。 - undefined

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接