WPF - 下载.Net4 Framework源码,查找OpenExpressApp中DataGrid枚举值更新错误的原因
OpenExpressApp之前使用了DataGrid来作为列表控件,在内置支持的属性编辑方式中介绍了枚举类型的使用,之前在.Net35下都是好的,一切正常,但是前一阵子OpenExpressApp升级到了.Net4了,对于枚举属性的列表控件编辑时会出现错误,更新一个枚举值后,控件显示有错误,如下所示:
查看堆栈,发现只能看到一个代码段,其余的都是.Net Framework内部的代码,看了代码方法,但是不太明白,我想最好的办法就是查看代码了,以前都是用Reflector查看代码,但是那只是静态的看代码,想起在VS2008下可以查看.Net Framework源码,我何不在VS2010下试试呢,于是开始去找Net4源码。
下载.Net 4源码
在 http://referencesource.microsoft.com/netframework.aspx 中选择.Net4下载
准备调试
网上介绍了一些调试框架代码的设置,我试了一下,但是都会去服务器下载,试过多个方法后,最终按照如下方法进行可以顺利的进行调试
- 安装后只有两个目录【Source】和【Symbols】
- 配置Option,去除【Enable Just My Code】,记住也不要设置【Enable .Net Framework source stepping】(否则允许后总会去服务器下载pdb文件)
- 配置Debug/Symbols(根据自己安装路径设置)
- 拷贝pdb到【Symbols\Cache\MicrosoftPublicSymbols】目录。我之前试验时发现下载的pdf会放到【MicrosoftPublicSymbols】目录,所以我们需要把安装路径下的pdb文件都拷贝到这个目录
调试代码
- 运行代码,开始调试,记住只能通过Call Stack设置断点
- 一步一步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; //这句话错误,没有返回正确的值
}
}
修改代码如下:Snippet public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return EnumViewModel.LabelToEnum(value.ToString(), targetType);
}
回顾
- 多实验,找到可能性
- 通过.Net Source能够方便调试和定位bug
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]
分类:
WPF
标签:
OpenExpressApp
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)