为什么 System.IO.Ports.SerialPort.GetPortNames() 会产生 DirectoryNotFoundException 错误?

4

只需一行代码:

System.IO.Ports.SerialPort.GetPortNames();

在调试时它运行良好,但发布版本会产生DirectoryNotFoundException异常:

System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\dev'.
   at System.IO.Enumeration.FileSystemEnumerator`1.CreateDirectoryHandle(String path, Boolean ignoreNotFound)
   at System.IO.Enumeration.FileSystemEnumerator`1.Init()
   at System.IO.Enumeration.FileSystemEnumerator`1..ctor(String directory, Boolean isNormalized, EnumerationOptions options)
   at System.IO.Enumeration.FileSystemEnumerable`1..ctor(String directory, FindTransform transform, EnumerationOptions options, Boolean isNormalized)
   at System.IO.Enumeration.FileSystemEnumerableFactory.UserFiles(String directory, String expression, EnumerationOptions options)
   at System.IO.Directory.InternalEnumeratePaths(String path, String searchPattern, SearchTarget searchTarget, EnumerationOptions options)
   at System.IO.Ports.SerialPort.GetPortNames()
   at ...

当程序运行在D盘时,它会尝试查找 D:\dev 目录而不是 C:\dev 目录。

创建这个目录可以让程序正常工作,但为什么它需要这样一个目录呢?


可以运行。您使用的是哪个 .net 框架/版本? - PMF
你看过它的源代码了吗?https://github.com/microsoft/referencesource/blob/master/System/sys/system/IO/ports/SerialPort.cs#L670 我会在你的注册表中查找这里:HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM,因为我所能看到的就是这些。很有可能是你特定机器上出现了问题。 - Andy
2
听起来像是在Windows中运行时,你会调用Linux的代码路径(寻找名为“/dev/ttyS *” 的设备文件)。你应该提供更多关于你的环境的细节:框架版本、构建过程等。 - Dark Falcon
1个回答

0

谢谢大家。在我更新了nuget包(System.IO.Ports)之后,问题似乎不再存在。

我还没有找出原因,虽然我尝试将其版本改回去,但异常也没有再次出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接