.net System.MissingMethodException-3.5 SP1版本控制地狱

.net System.MissingMethodException-3.5 SP1版本控制地狱,.net,exception,.net,Exception,在将ASP.net Web服务部署到我的生产服务器后,我遇到以下异常: System.MissingMethodException异常 找不到方法:'Boolean' System.Threading.WaitHandle.WaitOne(Int32)' MSDN声明: 版本信息 .NET框架 支持于:3.5 SP1、3.0 SP2、2.0 SP2 因此,此错误的原因是我的服务器未更新为最新的service pack 问题是: 为什么代码会启动?IMO如果目标框架版本不同,则应用程序根本不应启动

在将ASP.net Web服务部署到我的生产服务器后,我遇到以下异常:

System.MissingMethodException异常

找不到方法:'Boolean' System.Threading.WaitHandle.WaitOne(Int32)'

MSDN声明:

版本信息 .NET框架 支持于:3.5 SP1、3.0 SP2、2.0 SP2

因此,此错误的原因是我的服务器未更新为最新的service pack

问题是:

为什么代码会启动?IMO如果目标框架版本不同,则应用程序根本不应启动

如何确保我的代码可以在JIT之前在目标机器框架版本上运行


这太疯狂了。我认为微软应该更认真地对待版本控制问题。

很久以前,1.1和1.1 SP1也发生了同样的事情。。。
我想没有好的解决方案,因为程序集具有相同的版本,您可以尝试手动阅读.net安装的版本来验证它,或者在所有开发和生产机器中安装最后的service Pack。

我同意。问题是程序集版本号没有更改

在转换到.NET 3.5 SP1时,我确保生成服务器没有安装SP(即生成服务器框架版本与目标机器框架版本匹配),从而确保开发人员没有使用SP1特定的API。然后,一旦我们准备好了,就在构建服务器上安装了SP1。类似的方法本可以让你免于痛苦。

尽管该方法:

Boolean System.Threading.WaitHandle.WaitOne(Int32)
Boolean System.Threading.WaitHandle.WaitOne(Int32, bool)
不存在,方法:

Boolean System.Threading.WaitHandle.WaitOne(Int32)
Boolean System.Threading.WaitHandle.WaitOne(Int32, bool)
确实存在


使用反射器查看-
WaitOne(Int32)
调用
WaitOne(Int32,bool)
并将
false
作为布尔值。因此,只需使用第二个签名,提供
false
作为布尔值,就可以了。

感谢您的反馈。真可惜!我遇到了与上面相同的问题,这个解决方案对我有效。谢谢大家!+1@Nissim->漂亮的为我节省了很多时间。