我正在使用Visual Studio开发一个C#/ WPF应用程序。此应用程序使用com端口,然后在退出时释放它。我正在使用调试器经常运行和停止此应用程序。有时,在启动调试会话时,我得到一个异常,说com端口已经在使用中。
代码总是在退出时关闭打开的com端口,所以我运行了portmon以查看谁正在抓住该端口。事实证明,在“正常”情况下,我的应用程序(portmon中的Process KaleidoscopeApp)会抓取,使用和关闭端口。在未释放端口的情况下,端口正由进程“devenv”使用,这是Visual Studio本身。
为什么devenv在这些情况下是com端口的所有者?当我关闭应用程序时,它为什么继续持有它?只有当我关闭Visual Studio时才会释放端口。这是一种奇怪的行为,特别是因为调试器已在Visual Studio中专门停止。
这是来自portmon的捕获,显示对com端口的访问。您可以看到典型的会话以IRP_MJ_CREATE开头,并以IRP_MJ_CLOSE结束。 KaleidoscopeApp始终如此。您可以看到最后一位由devenv运行。然而,每次启动都始终在VS调试器中。
357 0.11112275 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCESS选项: 打开
358 0.00000305 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...406 0.02997366 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCESS
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 SUCCESS
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCESS选项: 打开
409 0.00000727 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...457 0.02995160 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCESS
458 0.03389956 KaleidoscopeApp IRP_MJ_CLOSE Serial4 SUCCESS
459 0.11307261 devenv.exe IRP_MJ_CREATE Serial4 SUCCESS选项: 打开
460 0.00000185 devenv.exe IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCESS
...501 35.55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 CANCELED
任何见解都将受到赞赏!
答案 0 :(得分:1)
在VS2008和VS2010的最后几周,我遇到了完全相同的问题。解决此问题的一种方法是从解决方案文件夹中删除.suo文件。
VS为什么这样做,以及为什么它存储在.suo文件中?我不知道......