Не удается поймать COMException (vb.net) - PullRequest
3 голосов
/ 24 февраля 2012

Я использую следующий код для доступа к элементу VSS:

Dim sItem As String = "$/MyVssProject/InexistentFile.txt"
Dim oItem As SourceSafeTypeLib.VSSItem = Nothing
Try
  oItem = m_oSourceSafe.VSSItem(sItem)
Catch ex As Runtime.InteropServices.COMException
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
Catch ex As Exception
  MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try

Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь получить экземпляр в файл, который не существует в VSSDB, что приводит кCOMException, который в принципе не будет проблемой (я бы ожидал).Фактически, возникает исключение, но вместо продолжения с кодом перехвата курсор отладки остается на строке «oItem = m_oSourceSafe.VSSItem (sItem)», показывая диалог с заголовком «COMException пересекает собственную / управляемую границу.

Отсюда выполнение не будет продолжаться, пока я не изменю содержимое sItem на существующий файл.

Почему исключение не перехватывается и как я могу его достичь?

Среда: VS2010 с .Net 2.0 на WinXP SP3 x86

Спасибо, товарищи!

1 Ответ

4 голосов
/ 16 апреля 2012

Я узнал, как ловить:

В настройках проекта на вкладке «Отладка» выбрать «Включить отладку неуправляемого кода». Отныне вы должны иметь возможность отловить исключение.

Однако недостатком этого является то, что больше невозможно редактировать код при пошаговом выполнении кода.

...