下載.Net 4源碼

DataGrid枚舉值更新錯誤的原因

作者:周 金根  來源:博客園  發佈時間:2010-06-09 18:10  閱讀:2287 次  原文鏈接  [收藏]  

  OpenExpressApp之前使用了DataGrid來作爲列表控件,在內置支持的屬性編輯方式中介紹了枚舉類型的使用,之前在.Net35下都是好的,一切正常,但是前一陣子OpenExpressApp升級到了.Net4了,對於枚舉屬性的列表控件編輯時會出現錯誤,更新一個枚舉值後,控件顯示有錯誤,如下所示:

查看堆棧,發現只能看到一個代碼段,其餘的都是.Net Framework內部的代碼,看了代碼方法,但是不太明白,我想最好的辦法就是查看代碼了,以前都是用Reflector查看代碼,但是那只是靜態的看代碼,想起在VS2008下可以查看.Net Framework源碼,我何不在VS2010下試試呢,於是開始去找Net4源碼。

下載.Net 4源碼

  在 http://referencesource.microsoft.com/netframework.aspx 中選擇.Net4下載

準備調試

網上介紹了一些調試框架代碼的設置,我試了一下,但是都會去服務器下載,試過多個方法後,最終按照如下方法進行可以順利的進行調試

  1. 安裝後只有兩個目錄【Source】和【Symbols】
  2. 配置Option,去除【Enable Just My Code】,記住也不要設置【Enable .Net Framework source stepping】(否則允許後總會去服務器下載pdb文件)
  3. 配置Debug/Symbols(根據自己安裝路徑設置)
  4. 拷貝pdb到【Symbols\Cache\MicrosoftPublicSymbols】目錄。我之前試驗時發現下載的pdf會放到【MicrosoftPublicSymbols】目錄,所以我們需要把安裝路徑下的pdb文件都拷貝到這個目錄

調試代碼

  1. 運行代碼,開始調試,記住只能通過Call Stack設置斷點
  2. 一步一步Step into調試後,發現事故發生地

    public class EnumConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return new EnumViewModel((Enum)value).Label;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return null;   //這句話錯誤,沒有返回正確的值
        }
    }

修改代碼如下:

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return EnumViewModel.LabelToEnum(value.ToString(), targetType);
        }

回顧

  1. 多實驗,找到可能性
  2. 通過.Net Source能夠方便調試和定位bug

 

歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章