2017年12月13日

在Linux上跑dotnetcore 2.0

作者 非鱼

准备把之前的彩色二维码生成改成一个Web服务,于是直接用.net core 2.0来实现一下。结果发现在.net core下面居然没有System.Drawing,只能去引用一个第三方的,找到了ZKWeb.System.Drawing,号称移植自Mono的实现,基本完全兼容。

代码倒是没有什么问题,两个引用名称改一下,下面的方法和常量都支持,编译也没有问题,直接运行测试也没有问题。

发布的时候在VS里找不到发布到Linux平台的设置项,只能使用命令行了。将发布的目录复制到Linux服务器上(CentOS 7.2),安装官方步骤安装.net core 2.0 sdk。dotnet +dll文件名,运行正常。

默认情况下跑起来的站点只支持localhost访问,要么改Startup.cs里面的代码,加上UseUrl()绑定所有IP,要么加个nginx反向代理也可以。

远程访问一下,生成二维码报错,找不到libgdiplus.so,在服务器上用yum libgdiplus,装了好大一堆东西,再运行,还是提示找不到这个so。于是手动把/usr/lib下面的libgdiplus.so.0.0.0复制到本项目目录下并命名为libgdiplus.so,这次成功了。但是,生成的最终图片只有二维码,原图消失了。

应该是最后一步把透明和二维码图片合并到原图上的时候出的问题,恐怕是不支持带透明像素的图片的Draw方法,这无解了……