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

Luc*_*tti 14 .net exception

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

system.missingMethodException而

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

MSDN 文档说明:

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

所以这个错误的原因是我的服务器没有更新到最新的Service Pack.

问题是:

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

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

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

Nis*_*sim 19

虽然方法:

Boolean System.Threading.WaitHandle.WaitOne(Int32)
Run Code Online (Sandbox Code Playgroud)

方法不存在:

Boolean System.Threading.WaitHandle.WaitOne(Int32, bool)
Run Code Online (Sandbox Code Playgroud)

确实存在.

用反射器看 - 用布尔值作为WaitOne(Int32)调用.所以简单地使用第二个签名,提供布尔值,你应该没问题.WaitOne(Int32,bool)falsefalse

  • 我遇到了与上面相同的问题,这个解决方案对我有用.谢谢!+1 (2认同)
  • @Nissim - >尼斯为我节省了很多时间. (2认同)

Ken*_*art 7

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

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


Die*_*cic 4

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