1

Visual Studio を使用して C#/WPF アプリケーションを開発しています。このアプリは COM ポートを使用し、終了時に解放します。デバッガーを使用して、このアプリケーションを頻繁に実行および停止しています。デバッグ セッションを開始すると、com ポートが既に使用されているという例外が発生することがあります。

このコードは、終了時に開いている com ポートを常に閉じるため、portmon を実行して、誰がポートを保持しているかを確認しました。「通常の」ケースでは、ポートは私のアプリケーション (portmon で KaleidoscopeApp を処理) によって取得され、使用され、閉じられます。ポートが解放されていない場合、そのポートは Visual Studio 自体であるプロセス "devenv" によって使用されています。

これらの場合、devenv が com ポートの所有者であるのはなぜですか? アプリを閉じると、アプリが保持され続けるのはなぜですか? ポートがリリースされるのは、Visual Studio を閉じたときだけです。特に Visual Studio 内でデバッガーが停止しているため、これは奇妙な動作です。

これは、com ポートへのアクセスを示す portmon からのキャプチャです。一般的なセッションが 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 成功
407 0.03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 成功
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Serial4
成功

457 0.02995160 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 成功
458 0.03389956 KaleidoscopeApp IRP_MJ_CLOSE Serial4 成功
459 0.11307261 devenv.exe IRP_MJ_CREATE Serial4 成功 オプション: 開く
460 0.0000CC0185
devenvIAL.exe

501 35.55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 CANCELED


どんな洞察もいただければ幸いです!

4

1 に答える 1

1

ここ数週間、VS2008 と VS2010 でまったく同じ問題が発生しました。これを修正する 1 つの方法は、ソリューション フォルダーから .suo ファイルを削除することです。

VS がそれを行っている理由と、それが .suo ファイルに保存されている理由は何ですか? 知らない...

于 2011-08-05T15:09:54.283 に答える