3

我使用下面的代碼來訪問VSS項目:不能趕上收到COMException(vb.net)

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)」行上,而不是處理catch代碼,顯示一個標題爲「COMException越過本機/管理邊界的對話框」。

從這裏執行不繼續,直到我sItem的內容更改爲現有的文件

爲什麼異常不會被抓到了,我怎麼能實現它

環境:VS2010與WinXP SP3上的.Net 2.0 x86

謝謝隊友!

+0

嗯,這很不尋常。而且相當致命,CLR無法從COM服務器恢復拋出硬異常而不是返回錯誤代碼。你根本沒有記錄實際的異常細節,所以這個問題是無法回答的。通常的建議適用:不要使用VSS。 – 2012-02-24 10:02:05

+0

Sry認爲這是自欺欺人的:檢索「InexistingFile.txt」失敗,因爲它不存在。 不使用VSS不是一種選擇;不會自願做 - 客戶的決定/遺產代碼) – 2012-04-16 11:09:19

回答

4

我發現瞭如何捕捉:

在項目的設置,「調試」選項卡上,選中「啓用非託管代碼調試」。從現在開始,你應該能夠討論異常。

雖然這樣做的缺點是,在代碼中單步執行代碼時不再可能編輯代碼。