2015-08-15 71 views
1

我想捕捉當我嘗試使用Neo4jClient.dll連接到我的neo4j數據庫時發生的異常。如果數據庫處於脫機狀態,則會出現以下錯誤消息:「在mscorlib.dll中發生類型'System.AggregateException'的異常,但未在用戶代碼中處理。」我的catch-block永遠不會到達。如何捕捉外部DLL中的異常?

這是我的代碼:

class Neo4JConnector 
{ 
    private static GraphClient client = null; 

    public Neo4JConnector(IniConfigSource configSource) 
    { 
     if (client == null) 
     { 
      client = new GraphClient(new Uri(configSource.Configs["Configuration"].Get("Neo4jUrl"))); 

      try 
      { 
       client.Connect(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Cannot connect"); // never reached :(
      } 

然後我試圖使用「外部」修改這個代碼:

class Neo4JConnector 
{ 
    private static GraphClient client = null; 

    [DllImport("Neo4jClient.dll", EntryPoint="Connect")] 
    static extern void Connect(); 

    public Neo4JConnector(IniConfigSource configSource) 
    { 
     if (client == null) 
     { 
      client = new GraphClient(new Uri(configSource.Configs["Configuration"].Get("Neo4jUrl"))); 

      try 
      { 
       Connect(); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Cannot connect"); 
      } 
     } 

但是我得到的卻是一個例外,說:「[系統。在Neo4jClient.dll

這是如何在Neo4jClient.dll

簽名看起來像一個名爲'連接'在DLL'Neo4jClient.dll'中的入口點。
public virtual void Connect(); 

我的代碼有什麼問題?有沒有更好的方法來捕捉外部異常?請幫助:(

+0

if其簽名說明at是'虛擬',那麼你可以覆蓋它,因爲你希望包括想要的連接失敗 – EpiGen

+0

{{catch} {}你能提供給完整的異常堆棧跟蹤嗎? –

回答

0

按照GitHub repo"Neo4jClient.dll"是.NET程序集你應該只把它從你的項目中添加引用和使用方法

下面是一個例子:。

using Neo4jClient; 
... 
var client = new GraphClient(new Uri("http://localhost:7474/db/data")); 
client.Connect(); 
+0

通過'nuget'理想地跟上變化 –

+0

@ChrisSkardon是的,他們也提供'nuget'包裝。感謝您的提醒。 –

+0

當然,我可以做到這一點。問題是,如果我啓動應用程序,但neo4j沒有運行,則會在Neo4jClient.dll中引發異常。但是,我想在我的代碼中發現異常,並向用戶提供適當的錯誤消息,而不是... – markai

0

解決的辦法是在異常設置菜單中取消選中「拋出異常類型時拋出異常」,當異常拋出外部庫時,此時我的catch塊已經到達,不需要使用[DllImport]