线上报了大量异常,错误信息为:找不到XX方法实现

代码调用关系是:

查看代码历史记录,发现最近上线前对 GetUserDottedLineSuperiors 方法做过修改,增加了一个可选参数。

跟相关开发同学确认后,是Hotfix的方式上线了UserService.dll,没有整版发布(而在测试环境验证的时候是整版发布)。

按说,改了哪里的代码,只需要更新该代码所在的dll即可,也就是只更新UserService.dll是没毛病的。

But,这样是不对的。

我们分别看一下DataRule.dll的源码和反编译后的代码:

代码(上图)还是保持着增加可选参数之前的样子,因为有可选参数的存在,编译一点问题都没有。

然而,反编译后(上图),发现编译器给加了一个可选参数的默认值。

说明虽然DataRule项目里的代码虽然没动,但是编译后的dll其实是跟之前不一样了。因此需要更新这个DataRule.dll。

由此也可以窥视一下C#的可选参数的实现方式,实际是在调用点加上了参数的默认值。

--------------------------------------------------------------------------------------------------------------------------------

其实一开始我也好奇,因为看IL,确实是给可选参数增加了[OPT]的标签,按说应该起作用

后面有时间再查一下MethodTable,我猜应该是MethodTable中此方法是3个参数,而且调用点应该也是去查MethodTable中三个参数对应的方法地址,因为调用的地方,IL是:

确实是要跳到三个参数对应的方法地址

最新文章

  1. Yii2.X 多语言-类图
  2. MacDown语法教程
  3. 《《我是一只IT小小鸟》》读后感
  4. FIX_前缀后缀_未提交
  5. [转]jQuery UI Dialog Modal Popup Yes No Confirm example in ASP.Net
  6. 如何让div上下左右都居中
  7. How to Keep Alive SSH Sessions
  8. Building Web Apps with SignalR, Part 1
  9. httpClient download file(爬虫)
  10. LAMP一键安装包(Python版)
  11. Webpact打包React后端Node+Express
  12. Objective-C特有类型——id
  13. 剑指offer(29)最小的K个数
  14. mysql -- 逻辑语句
  15. Jquery 属性选择器&设置元素属性
  16. HDU-1881 毕业bg (01背包变形)
  17. 实习培训——Servlet(6)
  18. win8安装配置python2.7
  19. Linux下./configure && make && make install 编译安装和卸载
  20. 如何无人值守安装linux系统(上)

热门文章

  1. 访问者模式(Visitor Patten)
  2. FileInputFormat 的实现之TextInputFormat
  3. Django实现自动发布(2视图-服务管理)
  4. RSA加密和数字签名在Java中常见应用【原创】
  5. GEOS/GDAL 交叉编译ARM64-linux版本
  6. 同一个交换机 局域网内 内网IP ping不通为什么 没关闭windows防火墙
  7. Linux创建用户,SFTP只允许访问指定目录
  8. Java基础 awt Graphics2D 生成矩形图片并向内写入字符串
  9. Chrome禁用software_reporter_tool
  10. 【APM】Pinpoint 监控告警(三)