【问题标题】:System.MissingMethodException - 3.5 SP1 versioning hellSystem.MissingMethodException - 3.5 SP1 版本控制地狱
【发布时间】:2009-03-02 14:55:46
【问题描述】:

在我的生产服务器上部署一个 ASP.net 网络服务后,我得到了这个异常:

System.MissingMethodException

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

MSDN documentation 声明:

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

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

问题是:

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

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

这太疯狂了。我认为微软应该更加重视版本控制问题。

【问题讨论】:

    标签: .net exception


    【解决方案1】:

    虽然方法:

    Boolean System.Threading.WaitHandle.WaitOne(Int32)
    

    不存在,方法:

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

    确实存在。

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

    【讨论】:

    • 我遇到了和上面一样的问题,这个解决方案对我有用。谢谢! +1
    • @Nissim -> 不错的一个为我节省了很多时间。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 感谢您的反馈。可惜了!
      猜你喜欢
      • 1970-01-01
      • 2019-05-10
      • 2011-01-22
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 2010-11-23
      • 2011-03-23
      • 2010-10-01
      相关资源
      最近更新 更多