2012-01-21 217 views
0

我有一個非常奇怪的問題。下面的代碼工作正常,如果我創建一個新的控制檯應用程序並將代碼放入,但如果我在我的解決方案中創建一個新的控制檯應用程序,並粘貼完全相同的代碼,我得到一個運行時聯編程序異常動態不包含定義你好。奇怪的事情是在我現有的解決方案中,代碼永遠不會進入TryGetMember()。c#動態從一個解決方案到另一個解決方案的行爲不同

這實在讓我感到困擾,解決方案太大而無法進入新的解決方案,我不相信會解決這個問題。在不起作用的控制檯應用程序中,所有引用都與可以工作的引用相同。唯一的區別是它不在解決方案中。整個解決方案的動作方式是相同的 - 有趣的是這是工作,但突然停止,所以我創建了這個簡單的程序來測試理論。

編輯:如果我沒有附加調試器,即Ctrl + F5,那麼在解決方案中不起作用的應用程序工作正常。

任何想法?

using System.Collections; 
using System.Collections.Generic; 
using System.Dynamic; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      IDictionary<string, object> dictionary = new Dictionary<string, object>(); 
      dictionary["hello"] = "world"; 
      dynamic d = new MyDynamicModel(dictionary); 
      var a = d.hello; 
     } 

    } 

    public class MyDynamicModel : DynamicObject 
    { 
     private IDictionary<string, object> Values { get; set; } 
     public MyDynamicModel(IDictionary<string, object> dict) 
     { 
      Values = dict; 
     } 

     public override bool TryGetMember(GetMemberBinder binder, out object result) 
     { 
      return Values.TryGetValue(binder.Name, out result); 
     } 
    } 
} 
+0

這應該工作,檢查值是否正確添加到您的代碼字典 –

+0

它確實工作的解決方案之外,但沒有在其中? - 將工作項目導入解決方案使其無法正常工作 – Jon

+0

DynamicObject是您在真實代碼中使用的類型嗎?這種情況發生的主要時間是內部成員的可訪問性... –

回答

0

這聽起來像你有視覺工作室設置打破拋出異常。只要使用Dynamics,就會拋出並處理更多異常,然後在處理包括動態對象的C#對象時再考慮。 C#綁定器總是試圖做一些事情,比如先調用靜態版本等,然後拋出一個RuntimeBindingException,它找不到成員,處理它,然後再次嘗試動態版本。

Debug > Exceptions下確保Thrown未在RuntimeBinderException上檢查,或者甚至只檢查所有CLR異常。

相關問題