在类库(.NET 标准)中找不到位图类

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

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

但我收到错误:

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

我正在使用 .NET Standard 2.0。

c# bitmap system.drawing class-library
3个回答
44
投票

我是 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 包。


26
投票

更新

截至上个月(2018 年 5 月),Microsoft 发布了

System.Drawing.Common
的生产版本(之前为预览版/RC),这是一个 NuGet 包,取代了
CoreCompat.System.Drawing
包的两个版本。这应该继续使用。

对于那些使用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 的插入式替代品。


0
投票

正如已接受的答案中提到的,System.Drawing.Common 是正确的选择。

但是,从 .NET 6 开始

System.Drawing.Common NuGet 包现在被视为 Windows 特定的库。针对非 Windows 操作系统进行编译时,平台分析器会在编译时发出警告。

问题在于 libgdiplus 的不可维护性。

来源

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