2014-03-06 77 views
0

我從我的MCF服務器應用程序中的一些代碼中得到了一個奇怪的異常,這個程序已經工作了好幾個月。我正在使用Mindscape Lightspeed 5 ORM,VS2013/C#和SQL Server 2008R2。Hg合併後執行流程改變和拋出異常

在此處,引發異常的代碼:

internal byte EplantId 
{ 
    get 
    { 
     if (_eplantId == 0) 
     { 
      if (UnitOfWork.Factories.Count(f => f.IsDefault) != 1) 
      { 
       throw new InvalidOperationException(
        "Unable to determine default ePlant. Contact Engineering."); 
      } 

      var eplant = UnitOfWork.Factories.FirstOrDefault(f => f.IsDefault); 
      if (eplant == null) 
      { 
       throw new InvalidOperationException(
        "Unable to determine default ePlant. Contact Engineering."); 
      } 

      _eplantId = eplant.EplantId; 
     } 

     return _eplantId; 
    } 
} 

當我通過這段代碼在調試模式下我看到執行開始的電流線在頂部步驟和可預測的方式移動通過 - 如果(_eplantId == 0),那麼if(UnitOfWork ... Count()) - 然後它跳回if(eplantId == 0),回到if(UnitOfWork ...),然後拋出異常。

這是在需要一點人工干預的特別多毛合併(TortoiseHg)之後開始的。然而,合併與這個合併在一個單獨的模塊中。相同的項目,不同的文件。

我在一個不相關的模塊中移動了一些代碼,並改變了行爲。現在,它逐漸超過第一個.Count語句並着陸於.FirstOrDefault語句,然後返回頂部並在拋出異常之前重複序列。

我完全被這個難住了。我甚至不知道如何去找出問題的癥結所在。你有什麼想法,提示或建議嗎?什麼可能導致這個異常被拋出? Mindscape庫引發異常,我沒有源代碼訪問權限。我百分之百地肯定,圖書館沒有錯,儘管它已經完美地運行了好幾個月,正如我所說的那樣,並且它仍然在我的默認分支中完美運行。

我強行清除了項目中的所有二進制文件,而不會改變行爲。我試圖在else語句中移動邏輯的第二位而不起作用。有沒有人遇到過這個問題,併成功地解決了這個問題?

+0

請務必閱讀選擇標籤時出現的說明! – Charles

回答

0

現在回過頭來看,這個答案顯而易見。從本質上講,誰給了一個無花果是什麼使代碼行爲有趣,錯誤是通過一個拙劣的合併引入的。

解決方案是退出合併,然後重試,直到它工作。在我的情況下,我不得不手動重建一個源文件,這個文件在兩個分支上被不同的項目/人員廣泛修改。一旦我做到了,一切都按預期工作。