Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单控制台应用程序:Winforms方法在没有X的Linux上引发异常_Winforms_Ubuntu_Mono_X11 - Fatal编程技术网

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

单控制台应用程序: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文件中的正确位置。异常消

我有一个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。我会汇报情况的