2014-03-31 72 views
2

爲標題道歉,但我真的很難甚至定義這裏發生了什麼。爲什麼Visual Studio在調用函數時會迷失方向?

我有一個程序,用一條線

long svnSuccess = SVNCommands.GetSVNHeadRevNo(svnLocation); 

SVNCommands是一個靜態類。

如果我在上面一行放置了一個斷點,然後用F11(步入)來觀察SVNCommands中的代碼的執行情況,它只是......什麼也沒有。行爲就像一個無限循環。該程序不會以任何方式崩潰。它只是停止進行。 VS不會把我帶到SVNCommands.GetHSVNHeadRevNo。我甚至在該函數開始時有斷點(只是爲了證明它沒有實現就沒有到達那裏)並且它們沒有被達到。

關於這裏可能發生什麼的任何想法?

+0

您可能想要手動刪除'\ bin'文件夾中的所有內容並重試?有時Visual Studio無法覆蓋.dll,因爲它被主機進程鎖定。它基本上是通過舊版本的程序集,而不是你在那裏的那個版本。 –

+0

SVN最初是用本機代碼編寫的,所以進入並不是什麼異常都沒有顯示任何東西。使方法阻塞在沒有響應的服務器上,或者使用擁有COM對象的線程被阻塞的COM公寓轉換也是不尋常的。調試+中斷所有應該讓你控制回來。 –

回答

0

嘗試在GetSVNHeadRevNo中添加System.Diagnostics.Debugger.Break(),然後運行該程序而不進行調試。它應該問你是否想要調試並希望能夠訪問代碼。我不知道爲什麼你的調試器不工作。如果SVNCommands的程序集與您的調試文件不匹配,它會給您一個警告。

如果這不起作用,請嘗試刪除您的Visual Studio緩存。據我的理解,這解決了很多無法解釋的問題。嘗試使用How do you clear your Visual Studio cache on Windows Vista?的回答

0

對我來說有點奇怪 - 可能並不經常與其他人相關。

開發機器是64位,但最終用戶機器是32位。

這一般很好,但我們只有32位SharpSVN dll。一切工作都按預期進行,直到我們跳入解決方案設置並將目標平臺從「x86」更改爲「任何CPU」。然後,在測試的64位開發機,只要輸入的功能,目前看起來是這樣的:

public static long GetSVNHeadRevNo(string svnLocation) 
    { 
     using (SvnClient client = new SvnClient()) 
     { 
      setupAuthentication(client); 
      SvnInfoEventArgs info = null; 
      Uri repos = new Uri(svnLocation); 

      try 
      { 
       client.GetInfo(repos, out info); 
      } 
      catch (Exception ex) 
      { 
      } 

      return info.Revision; 
     }    
    } 

我猜程序試圖在所需的DLL吮吸,然後有一個(安靜)配合。

將目標平臺更改回x86已解決所有問題。感謝所有幫助過我的人。

相關問題