虽然 c# 不是我的主要编程语言,但我已经维护了这样一个程序几年了。该程序通过串行端口连接到设备,适用于 Windows XP 至 8.1。一个特定的“功能”是它使用 .NET Framework 2.0。
随着一些用户升级到 Windows 10,我们收到提示称程序无法检测/打开设备的 COM 端口。我们已经在我们自己的测试系统上使用干净的 Win10 安装确认了这一点。
事实证明,函数 SerialPort.GetPortNames() 返回了错误的端口名称,并在端口名称后添加了“奇怪”的字符。 例如:
- COM3向
- COM3䡢
- COM3゠
等等。当我刷新列表时,每次数字后面都会出现另一个(或两个)字符。 测试代码非常简单:
string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
log("Available ports:");
foreach (string PortAvailable in portNames)
{
log(PortAvailable);
}
日志函数只是向表单上的标准文本框添加一行:
txtLog.Text += Msg + Environment.NewLine;
这适用于所有其他 Windows 版本。 我检查了注册表,那里看起来也很好。 有人对此有想法吗?
我怀疑 .NET Framework 2.0 不再是 100% 兼容的,尽管您可以在 Windows 功能中启用它并且程序本身似乎运行良好(除了我的串行端口问题)。我有点害怕升级到更新的 .NET,更不用说我们有 VisualStudio 2008 for c# (max=.NET 3.5)。请注意,该程序仍然需要在 Windows XP 上运行(POS 版本仍由 Microsoft 维护)。
添加: 我已经将一个测试程序“升级”到 .NET 3.5,但仍然有完全相同的问题。 下一步是安装一个新的 VisualStudio(现在看来它是免费的??我还应该检查 Studio 中的隐私设置吗?;-)。
添加 2: 安装了 VisualStudio 2015 并使用不同的 .NET 框架版本进行了多次构建。 v2.0 和 3.5 仍然添加了奇怪的字符。但在 v4.0 及更高版本中,这个问题似乎得到了解决!现在让原始程序编译并为更新的框架工作。 但我发现这个问题真的很奇怪,并希望这会影响更多的 .NET 功能和更多的程序。
最佳答案
我也见过奇怪的人物。我的解决方案是使用正则表达式过滤掉通信端口名称的数字部分。
Dim ports As New Devices.Ports
For Each s As String In ports.SerialPortNames
s = Regex.Replace(s, "\D*(\d+)\D*", "$1")
Debug.WriteLine(s)
Next
关于c# - SerialPort.GetPortNames() 返回不正确的端口名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040209/