在linux上使用mono运行VS编译的C#(串行连接)文件

时间:2015-04-14 09:07:09

标签: c# linux io mono

据我所知,应该可以使用C#mono在linux上运行visual studio编译的C#文件。我使用apt-get install mono-complete安装它,所以应该包含所有内容

然而,我确实得到了一些我不了解的Unhandled Exception错误,我希望有人可以帮助我。我应该注意到一切都在Windows机器上运行,并且我有补偿端口等等所以它应该适合linux。

我的设置如下:

_serialPort = new SerialPort();
_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = 115200;
_serialPort.StopBits = StopBits.One;   
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.Handshake = 0;
_serialPort.ReadTimeout = 500; 
_serialPort.WriteTimeout = 500;
_serialPort.Open();

我得到的错误是:

System.IO.IOException: Invalid argument
  at System.IO.Ports.SerialPortStream.ThrowIOException () [0x00000] in <filename unknown>:0 
  at System.IO.Ports.SerialPortStream.SetSignal (SerialSignal signal, Boolean value) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:SetSignal (System.IO.Ports.SerialSignal,bool)
  at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
  at System.IO.Ports.SerialPort.Open () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
  at TivaCOM.setup () [0x00000] in <filename unknown>:0 
  at TivaCOM.Main () [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.IO.IOException: Invalid argument
  at System.IO.Ports.SerialPortStream.ThrowIOException () [0x00000] in <filename unknown>:0 
  at System.IO.Ports.SerialPortStream.SetSignal (SerialSignal signal, Boolean value) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:SetSignal (System.IO.Ports.SerialSignal,bool)
  at System.IO.Ports.SerialPortStream..ctor (System.String portName, Int32 baudRate, Int32 dataBits, Parity parity, StopBits stopBits, Boolean dtrEnable, Boolean rtsEnable, Handshake handshake, Int32 readTimeout, Int32 writeTimeout, Int32 readBufferSize, Int32 writeBufferSize) [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPortStream:.ctor (string,int,int,System.IO.Ports.Parity,System.IO.Ports.StopBits,bool,bool,System.IO.Ports.Handshake,int,int,int,int)
  at System.IO.Ports.SerialPort.Open () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Open ()
  at TivaCOM.setup () [0x00000] in <filename unknown>:0 
  at TivaCOM.Main () [0x00000] in <filename unknown>:0 

If someone could help me out I would be very grateful

1 个答案:

答案 0 :(得分:0)

首先,很可能你的VS C#exe是用Windows依赖编译的,特别是在讨论USB和串口等硬件时,平台之间存在很多差异。如果您有源代码,那么您可以在此线程How to convert a .NET exe to native Win32 exe?中尝试建议的方法,以编译代码而不编译本机部分。

如果您没有源代码并且只有exe,则需要使用wine方法在wine中运行代码。您可以使用以下帖子介绍如何设置linux串行设备和wine(windows COMXX设备)http://ubuntuforums.org/showthread.php?t=1335098之间的对应关系。 如果您使用的是最新的Linux发行版,则必须允许用户通过将用户添加到组拨出来访问用户的ttySXX端口。