繁体   English   中英

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

[英]Running VS compiled C#(serial connection) file on linux with mono

据我所知,应该可以使用C#mono在Linux上运行Visual Studio编译的C#文件。 我使用apt-get install mono-complete安装了它,因此应该包括所有内容

但是,我确实收到一些我无法理解的未处理异常错误,希望有人可以帮助我。 我应该注意,一切都在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

首先,很可能您的VS C#exe是使用Windows依赖项编译的,尤其是在谈论诸如USB和串行端口之类的硬件时,平台之间存在很多差异。 如果您有源代码,则可以在此线程中尝试建议的方法。 如何将.NET exe转换为本地Win32 exe? ,以编译代码而不编译本机部分。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM