Mono控制台应用程序:Winforms方法在没有X的Linux上引发异常

时间:2013-04-24 21:44:18

标签: winforms ubuntu mono x11

我有一个C#控制台应用程序,我想在Linux上运行。我已经在MonoDevelop和我的机器(Ubuntu 12.04 LTS,64位)上编译它运行正常。但是,在VPS上我已经租用了(相同的操作系统但没有X11),而应用程序启动没有问题,我在运行时获得了异常。

导致异常的调用是System.Windows.Forms.TextRenderer类的MeasureText方法。如果你想知道这个方法在控制台应用程序中做了什么,它需要测量以某种字体呈现的文本的长度,以计算它正在创建的SVG文件中的文本元素的正确放置。下面的异常消息和堆栈跟踪摘录:

An exception was thrown by the type initializer for System.Windows.Forms.XplatUI


at System.Windows.Forms.TextRenderer.MeasureTextInternal (IDeviceContext dc, System.String text, System.Drawing.Font font, Size proposedSize, TextFormatFlags flags, Boolean useMeasureString) [0x00000] in <filename unknown>:0 
at System.Windows.Forms.TextRenderer.MeasureText (System.String text, System.Drawing.Font font) [0x00000] in <filename unknown>:0 

我想我已经在服务器上正确安装了有问题的字体,至少在我调用fc-list时会显示出来。那么我需要X还是有办法吗?我刚刚错过了服务器上的一些软件包安装吗?如果做不到的话,是否有可以用来实现文本测量的替代方案?

1 个答案:

答案 0 :(得分:0)

我尝试了上面提出的建议并且有效。我安装了xvfb,现在正通过xvfb-run运行mono。异常已经消失,服务器上的内存使用量也没有增加。