System.MissingMethodException之引用的dll版本号不对

在维护项目的时候遇到了一个问题,一个功能,在的服务器上就报错,在有的服务器上不报错。在我电脑上也不报错……虽然说不能推卸责任吧,但是我总觉得不是代码的错,应该是哪里没有配置好,或者报错的服务器里面缺点什么东西。但是缺什么呢?引用的dll吧,然后就去核对用到的dll,发现需要的dll一个都没有少,大小也一样。那到底缺什么呢?现场催的急,上网查吧。报的错误只是把错误的方法名暴露出来了。其他的一点提示都没有,那就查查Exception吧。这个Exception的类型是:System.MethodAccessException,那就查一下报这个类型的异常是什么原因吧。

MSDN的解释是:“尝试访问类中的私有方法或受保护的方法时引发的异常。”

这个是怎么回事?如果我访问的那个方法是私有方法,那在编译的时候应该就报异常了啊,而且也看了用到的那个方法,是public 的。拿到是那个文件夹的权限收到限制了?然后又去核对,没有……纠结了好长时间,不知道是哪里的错。那就改一下代码吧,这个异常报的太广泛了,根本不知道错在哪里了。但是改了在我电脑上也测试不出来,就把改好的dll放到服务器上测试,想让他把异常报出来,经过了很多次更改,终于把有用的一场暴露出来了:

System.MissingMethodException:“找不到方法……”

原来是找不到方法啊,但是为什么找不到呢?是哪里错了,对比了现场的dll和我的dll大小是没有问题的,应该是一样的吧……后来就上网查了一下,网上说是因为引用的dll版本号不对,然后我就打开用到的dll的版本核对了一下,果然不对,服务器上的那个dll版本是老的版本。问题就是处在了这里,把服务器上的dll一换,功能正常运行……(其实之前也替换过dll,但是替换的都不是这个dll,因为大小什么的都一样,就没有考虑它,也得亏当时没有替换它,要不然就没有核对dll版本号的这个经验值了……)

这个错误是个很小的错误,但是找原因找了好长时间才找出来,走了好多弯路。但是最终还是收获了经验。dll版本的管理很重要啊。至于服务器上的版本号不对,可能是以前升级的时候,有的服务器升了,有的服务器漏升了,所以导致的这个错误吧。

 

你可能感兴趣的:(System.MissingMethodException之引用的dll版本号不对)