将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之前在目标机器框架版本上运行?
这很疯狂。我认为微软应该更认真地对待版本问题。
答案 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安装版本来验证它,或者只是在所有开发和生产机器中安装最后的服务包。