Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot find Bitmap Class in Class Library (.NET Standard)

I want to make a Class Library (.NET Standard) and I'm using System.Drawing,

but I get the error:

CS0246 C# The type or namespace name 'Bitmap' could not be found (are you missing a using directive or an assembly reference?)

I'm using .NET Standard 2.0.

like image 821
IIRawCodeII Avatar asked Oct 13 '17 04:10

IIRawCodeII


2 Answers

I'm the author of CoreCompat.System.Drawing. If you're on .NET Core 2.0, I'd recommend you'd move to System.Drawing.Common instead, which is the Microsoft-maintained implementation of System.Drawing for .NET Core.

If you're on Linux or macOS, make sure to install libgdiplus. On macOS, run brew install mono-libgdiplus; on Linux your package manager should provide you with a libgdiplus package.

like image 129
Frederik Carlier Avatar answered Nov 09 '22 00:11

Frederik Carlier


Update

As of last month (May 2018), Microsoft have a production release (previously it was preview/RC) of System.Drawing.Common, a NuGet package which supersedes both versions of the CoreCompat.System.Drawing package. This should be used going forwards.

For those using docker

You also need the libgdiplus library within your final docker image, as System.Drawing.Common relies on this. You can install that using the following Dockerfile command:

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

Old answer

For now you can use the CoreCompat.System.Drawing nuget package.

We've been using it in production code for a few months (drawing on video screencaps) and it has been working great. It's basically a slot-in replacement for System.Drawing.

like image 25
DiplomacyNotWar Avatar answered Nov 09 '22 02:11

DiplomacyNotWar