我想制作一个类库(.NET Standard)并且我正在使用 System.Drawing,
但我收到错误:
CS0246 C# 找不到类型或命名空间名称“Bitmap” (您是否缺少 using 指令或程序集引用?)
我正在使用 .NET Standard 2.0。
我是 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 包。
更新
截至上个月(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 的插入式替代品。
正如已接受的答案中提到的,System.Drawing.Common 是正确的选择。
但是,从 .NET 6 开始
System.Drawing.Common NuGet 包现在被视为 Windows 特定的库。针对非 Windows 操作系统进行编译时,平台分析器会在编译时发出警告。
问题在于 libgdiplus 的不可维护性。