在 ASP.NET Core 中引用 System.Drawing.Common,在 Ubuntu 16.04 上运行时出现下面的错误:
System.TypeInitializationException: The type initializer for 'Gdip' threw an exception. ---> System.DllNotFoundException: Unable to load DLL 'libgdiplus': The specified module could not be found.
at System.Runtime.InteropServices.FunctionWrapper`1.get_Delegate()
at System.Drawing.SafeNativeMethods.Gdip.GdiplusStartup(IntPtr& token, StartupInput& input, StartupOutput& output)
at System.Drawing.SafeNativeMethods.Gdip..cctor()
--- End of inner exception stack trace ---
at System.Drawing.SafeNativeMethods.Gdip.GdipLoadImageFromDelegate_linux(StreamGetHeaderDelegate getHeader, StreamGetBytesDelegate getBytes, StreamPutBytesDelegate putBytes, StreamSeekDelegate doSeek, StreamCloseDelegate close, StreamSizeDelegate size, IntPtr& image)
at System.Drawing.Image.InitFromStream(Stream stream)
at System.Drawing.Image.LoadFromStream(Stream stream, Boolean keepAlive)
操作系统中安装了gdi 库了吗?祥见CoreCompat的github仓库
@dudu: 用了这两个方法我展示的验证码出来是乱码。。。。是啥原因呀?
@一直在飞: 建议博问中专门提问一下
后来在 docker 容器中使用 System.Drawing.Common 遇到了新的问题,详见 asp.net core 2.1 容器中使用 System.Drawing.Common 的问题
用了这两个方法我展示的验证码出来是乱码。。。。是啥原因呀?
乱码传送门 http://www.cnblogs.com/xxff/p/9363477.html#4027986
不错,解决了
可以帮我看下是什么问题吗,我的服务器是centos7,我已经安装了libgdiplus,但是执行cd /usr/lib && ln -s libgdiplus.so gdiplus.dll命令的时候提示我gdiplus.dll文件不存在,但是我find了一下,确实有这个文件......
我的.net core部署到centos7上以后,有个文件保存的操作,将base64转成图片,下面是我的代码:
本地是可以保存图片的,就线上不行,所以问题应该还是处在服务器环境上, 不知道是哪里不对。
ln -s libgdiplus.so gdiplus.dll
是把 gdiplus.dll 软链接到 libgdiplus.so ,是针对没 gdiplus.dll 文件的情况,而你的 centos 中是有 gdiplus.dll 的,情况不一样
@dudu: 原来是这样,对了,我刚重启了一下服务器,再运行程序,可以把图片上传过去了(/ω\)
估计是没重启就没生效,不过我的图片路径存得不对,我想在应用程序根目录创建Images文件夹,然后再存下面,现在直接存在根目录下了