【问题标题】:Cannot find Bitmap Class in Class Library (.NET Standard)在类库中找不到位图类(.NET 标准)
【发布时间】:2018-03-25 03:31:34
【问题描述】:

我想制作一个类库(.NET 标准)并且我正在使用 System.Drawing,

但我得到了错误:

CS0246 C# 找不到类型或命名空间名称“位图” (您是否缺少 using 指令或程序集引用?)

我使用的是 .NET Standard 2.0。

【问题讨论】:

  • GDI / System.Drawing(位图所在的位置)在 .NET Core 中根本不可用,因此在 .NET Standard 中也不可用。移植到 Core 的进展在这里:github.com/dotnet/corefx/issues/20325
  • 使用 System.Windows.Media.Imaging;

标签: c# bitmap system.drawing class-library


【解决方案1】:

我是 CoreCompat.System.Drawing 的作者。如果您使用的是 .NET Core 2.0,我建议您改用 System.Drawing.Common,这是 Microsoft 维护的 System.Drawing for .NET Core 实现。

如果您使用的是 Linux 或 macOS,请确保安装 libgdiplus。在 macOS 上,运行 brew install mono-libgdiplus;在 Linux 上,你的包管理器应该为你提供一个 libgdiplus 包。

【讨论】:

  • 我认为CoreCompat.System.Drawing 如果想要部署一个纯 .NET Standard 依赖库仍然很有用。一个问题:CoreCompat.System.Drawing 的依赖关系可以降低到仅 .NET Standard 1.2 吗?这使其也与 .NET Framework 4.5 兼容
【解决方案2】:

更新

截至上个月(2018 年 5 月),Microsoft 发布了 System.Drawing.Common 的生产版本(之前是预览版/RC),这是一个取代 CoreCompat.System.Drawing 包的两个版本的 NuGet 包。这应该在以后使用。

对于那些使用 docker 的人

您还需要在最终的 docker 映像中包含 libgdiplus 库,因为 System.Drawing.Common 依赖于此。您可以使用以下 Dockerfile 命令安装它:

RUN apt-get update \
    && apt-get install -y libgdiplus libc6-dev \
    && ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll \
    && ln -s /usr/lib/x86_64-linux-gnu/libdl.so /lib64/libdl.so.2 \
    && ln -s /usr/lib/x86_64-linux-gnu/libdl.so /lib64/libdl.so

旧答案

现在您可以使用CoreCompat.System.Drawing nuget 包。

几个月来,我们一直在生产代码中使用它(在视频屏幕截图上绘制),并且效果很好。它基本上是 System.Drawing 的插入式替代品。

【讨论】:

  • 我已经安装了 NuGet 包,但我无法访问它的参考。怎么会?
  • 原来我不需要添加CoreCompat。谢谢!
  • @IIRawCodeII 我只是想指出,在过去的几天里我发现如果您使用的是足够新的版本,现在有一个 CoreCompat.System.Drawing.v2 库可用.NET 核心。不幸的是,我在 AWS 的 Lambda 上使用它,所以我必须等待 :)
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
  • 2017-11-21
  • 2016-12-31
  • 2021-03-26
  • 1970-01-01
相关资源
最近更新 更多