运行 VS 在 linux 上用单声道编译了 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 和串行端口等硬件时,平台之间存在大量差异。如果您有源代码,那么您可以尝试此线程 How to convert a .NET exe to native Win32 exe? 中建议的方法来编译代码而不编译本机部分。
如果您没有源代码而只有 exe,则需要使用 wine 方法,在 wine 中 运行 您的代码。关于如何设置linux串口设备与wine(windowsCOMXX设备)http://ubuntuforums.org/showthread.php?t=1335098的对应关系,你可以使用下面post。
如果您使用的是最新的 linux 发行版,您必须通过将用户添加到拨出组来允许您的用户访问 ttySXX 端口。
据我所知,应该可以通过使用 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 和串行端口等硬件时,平台之间存在大量差异。如果您有源代码,那么您可以尝试此线程 How to convert a .NET exe to native Win32 exe? 中建议的方法来编译代码而不编译本机部分。
如果您没有源代码而只有 exe,则需要使用 wine 方法,在 wine 中 运行 您的代码。关于如何设置linux串口设备与wine(windowsCOMXX设备)http://ubuntuforums.org/showthread.php?t=1335098的对应关系,你可以使用下面post。 如果您使用的是最新的 linux 发行版,您必须通过将用户添加到拨出组来允许您的用户访问 ttySXX 端口。