记一次线上问题排查:C#可选参数的坑
2024-10-20 08:44:27
线上报了大量异常,错误信息为:找不到XX方法实现
代码调用关系是:
查看代码历史记录,发现最近上线前对 GetUserDottedLineSuperiors 方法做过修改,增加了一个可选参数。
跟相关开发同学确认后,是Hotfix的方式上线了UserService.dll,没有整版发布(而在测试环境验证的时候是整版发布)。
按说,改了哪里的代码,只需要更新该代码所在的dll即可,也就是只更新UserService.dll是没毛病的。
But,这样是不对的。
我们分别看一下DataRule.dll的源码和反编译后的代码:
代码(上图)还是保持着增加可选参数之前的样子,因为有可选参数的存在,编译一点问题都没有。
然而,反编译后(上图),发现编译器给加了一个可选参数的默认值。
说明虽然DataRule项目里的代码虽然没动,但是编译后的dll其实是跟之前不一样了。因此需要更新这个DataRule.dll。
由此也可以窥视一下C#的可选参数的实现方式,实际是在调用点加上了参数的默认值。
--------------------------------------------------------------------------------------------------------------------------------
其实一开始我也好奇,因为看IL,确实是给可选参数增加了[OPT]的标签,按说应该起作用
后面有时间再查一下MethodTable,我猜应该是MethodTable中此方法是3个参数,而且调用点应该也是去查MethodTable中三个参数对应的方法地址,因为调用的地方,IL是:
确实是要跳到三个参数对应的方法地址
最新文章
- Yii2.X 多语言-类图
- MacDown语法教程
- 《《我是一只IT小小鸟》》读后感
- FIX_前缀后缀_未提交
- [转]jQuery UI Dialog Modal Popup Yes No Confirm example in ASP.Net
- 如何让div上下左右都居中
- How to Keep Alive SSH Sessions
- Building Web Apps with SignalR, Part 1
- httpClient download file(爬虫)
- LAMP一键安装包(Python版)
- Webpact打包React后端Node+Express
- Objective-C特有类型——id
- 剑指offer(29)最小的K个数
- mysql -- 逻辑语句
- Jquery 属性选择器&;设置元素属性
- HDU-1881 毕业bg (01背包变形)
- 实习培训——Servlet(6)
- win8安装配置python2.7
- Linux下./configure &;&; make &;&; make install 编译安装和卸载
- 如何无人值守安装linux系统(上)
热门文章
- 访问者模式(Visitor Patten)
- FileInputFormat 的实现之TextInputFormat
- Django实现自动发布(2视图-服务管理)
- RSA加密和数字签名在Java中常见应用【原创】
- GEOS/GDAL 交叉编译ARM64-linux版本
- 同一个交换机 局域网内 内网IP ping不通为什么 没关闭windows防火墙
- Linux创建用户,SFTP只允许访问指定目录
- Java基础 awt Graphics2D 生成矩形图片并向内写入字符串
- Chrome禁用software_reporter_tool
- 【APM】Pinpoint 监控告警(三)