See the question and my original answer on StackOverflow

SharpMap is still maintained, but the nuget packages are not. And the packages (dated 2014) are not compatible with all the dependencies (GeoAPI, ProjNet, etc.) current nuget versions. What I suggest is:

  1. don't use SharpMap nuget, build your own SharpMap assemblies from github (most of the assemblies compile w/o any issue, especially the main one, SharpMap)
  2. reference that assembly (and only that one)
  3. reference the latest versions of the dependency assemblies manually one by one when you need it.

Here is your WinForms code adapted with the latest SharpMap, GeoAPI and ProjNet:

public partial class Form1 : Form
    public Form1()
        // just add a PictureBox on the Winform.

    private void DrawMap()
            new CoordinateSystemServices(
                    new CoordinateSystemFactory(),
                    new CoordinateTransformationFactory(),

        var map = new Map(pictureBox1.Size);
        map.BackColor = Color.White;
        var file = new ShapeFile(@"D:\Downloads\FRA_adm\FRA_adm1.shp", true);
        var layer = new VectorLayer("France", file);
        pictureBox1.Image = map.GetMap();

This will display this:

enter image description here

As you see, the map looks funny, if you happen to know France contours :-). If you want the correct projection, you need to add this code to the layer:

layer.CoordinateTransformation = Wgs84ToGoogle;


// Wgs84 to Google Mercator Coordinate Transformation
// this code comes from SharpMap\Examples\WinFormSamples\LayerTools.cs
private ICoordinateTransformation _wgs84ToGoogle;
public ICoordinateTransformation Wgs84ToGoogle
        if (_wgs84ToGoogle == null)
            var csFac = new CoordinateSystemFactory();
            var ctFac = new CoordinateTransformationFactory();

            var wgs84 = csFac.CreateGeographicCoordinateSystem(
              "WGS 84", AngularUnit.Degrees, HorizontalDatum.WGS84, PrimeMeridian.Greenwich,
              new AxisInfo("north", AxisOrientationEnum.North), new AxisInfo("east", AxisOrientationEnum.East));

            var parameters = new List<ProjectionParameter>();
            parameters.Add(new ProjectionParameter("semi_major", 6378137.0));
            parameters.Add(new ProjectionParameter("semi_minor", 6378137.0));
            parameters.Add(new ProjectionParameter("latitude_of_origin", 0.0));
            parameters.Add(new ProjectionParameter("central_meridian", 0.0));
            parameters.Add(new ProjectionParameter("scale_factor", 1.0));
            parameters.Add(new ProjectionParameter("false_easting", 0.0));
            parameters.Add(new ProjectionParameter("false_northing", 0.0));

            var projection = csFac.CreateProjection("Google Mercator", "mercator_1sp", parameters);
            var epsg900913 = csFac.CreateProjectedCoordinateSystem(
              "Google Mercator", wgs84, projection, LinearUnit.Metre, new AxisInfo("East", AxisOrientationEnum.East),
              new AxisInfo("North", AxisOrientationEnum.North));

            ((CoordinateSystem)epsg900913).DefaultEnvelope = new[] { -20037508.342789, -20037508.342789, 20037508.342789, 20037508.342789 };

            _wgs84ToGoogle = ctFac.CreateFromCoordinateSystems(wgs84, epsg900913);
        return _wgs84ToGoogle;

And you now will get this:

enter image description here

SharpMap may be a bit bloated, but it still provides valuable code and the samples work. Since the documentation is hard to find, if you use it, you may have to dig in the source.

Also, you want to know that GDI+, which SharpMap uses, is not officially supported by Microsoft on server side. It doesn't mean it doesn't work, you'll have to try by yourself in your own context.