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

时间:2009-03-02 14:55:47

标签: .net exception

将ASP.net Web服务部署到我的生产服务器后,我遇到了这个例外:

  

system.missingMethodException而

     

找不到方法:'布尔值   System.Threading.WaitHandle.WaitOne(的Int32)'

MSDN documentation声明:

  

版本信息   .NET Framework   受以下版本支持: 3.5 SP1 ,3.0 SP2,2.0 SP2

因此出现此错误的原因是我的服务器未更新到最新的Service Pack。

问题是:

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

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

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

3 个答案:

答案 0 :(得分:19)

虽然方法:

Boolean System.Threading.WaitHandle.WaitOne(Int32)

不存在,方法:

Boolean System.Threading.WaitHandle.WaitOne(Int32, bool)

确实存在。

查看反射器 - WaitOne(Int32)调用WaitOne(Int32,bool)并将false作为布尔值。所以只需使用第二个签名,提供false作为布尔值,你应该没问题。

答案 1 :(得分:7)

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

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

答案 2 :(得分:4)

很久以前1.1和1.1 SP1对我来说也是如此...... 我想这不是一个好的解决方案,因为程序集具有相同的版本,您可以尝试通过手动阅读.net安装版本来验证它,或者只是在所有开发和生产机器中安装最后的服务包。