c# - SerialPort.GetPortNames() 返回不正确的端口名称

标签 c# .net-2.0 windows-10

虽然 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/

相关文章:

c# - 以零开头的电话号码的 String.Format

c# - 为什么可为空的 KeyValuePair<,> 没有键属性?

vb.net - 对结构的反射(reflection)与类有所不同-但仅在代码方面

macos - 现代 IE Windows 10 Virtualbox for Mac Zip 文件损坏

c# - (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(2053,3) : error MSB6006: "java.exe" exited with code 1

c# - 无法在 .net core 3 + angular 应用程序中加载 AuthorizeService 中的设置

C#程序(进程)不会卸载

iphone - 在 Windows 10 上使用 VS Code 在 iphone 上调试 flutter

针对 Win10 和 Win8 设备的 Nuget 包

c# - 引用程序集后无法使用命名空间