单控制台应用程序:Winforms方法在没有X的Linux上引发异常
我有一个C控制台应用程序,我想在Linux上运行。我在MonoDevelop中编译了它,在我的机器Ubuntu12.04LTS上,64位运行良好。但是,在VPS上,我租用了相同的操作系统,但没有X11,虽然应用程序启动时没有问题,但在运行时会出现异常 导致异常的调用是System.Windows.Forms.TextRenderer类的MeasureText方法。如果您想知道此方法在控制台应用程序中的作用,它需要测量以特定字体呈现的文本长度,以计算文本元素在其创建的SVG文件中的正确位置。异常消息和堆栈跟踪摘录如下:单控制台应用程序:Winforms方法在没有X的Linux上引发异常,winforms,ubuntu,mono,x11,Winforms,Ubuntu,Mono,X11,我有一个C控制台应用程序,我想在Linux上运行。我在MonoDevelop中编译了它,在我的机器Ubuntu12.04LTS上,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来做这个,还是有办法?我是不是错过了服务器上的一些软件包安装?如果做不到这一点,是否有其他方法可以用来实现文本测量 我尝试了上面提出的建议,效果很好。我安装了xvfb,现在通过xvfb运行mono。异常已消失,服务器上的内存使用率也没有增加多少。您可以运行虚拟X11服务器,这可能是最简单的解决方法,不会让您更改任何代码。谢谢,我将尝试一下,在这里找到这篇文章,推荐xvfb。我会汇报情况的