虽然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及以上这个问题似乎已经解决了!现在,为原始程序编译并为更新的Framework工作.
但是我发现这个问题非常奇怪,并且预计这将会影响更多.NET函数和更多程序.