【问题标题】:ASP.Net MissingMethodException - "ctor" method not foundASP.Net MissingMethodException - 找不到“ctor”方法
【发布时间】:2010-11-01 13:51:36
【问题描述】:

我们在无法重新创建的生产服务器上遇到间歇性问题。

关于这个问题有两件非常奇怪的事情。首先,它是异常处理助手类的构造函数 (ctor) 上的方法未找到错误,其次,我们为远程用户打开了自定义错误,并且此属性被忽略。

错误的详细信息是:

“/MyWebsite”应用程序中的服务器错误。


找不到方法:'Void MyExceptionHelperClass..ctor (System.Exception)'。

...
异常详细信息:System.MissingMethodException:找不到方法:'Void MyExceptionHelperClass..ctor (System.Exception)'。
...

堆栈跟踪非常无用。

我的想法是可能存在内存不足错误或类似的东西正在杀死页面。当异常处理代码启动时,它会尝试创建一个异常对象,但由于同样的原因而失败并给出此错误。

然而,这是一种疯狂的猜测。我们正在等待事件日志,以查看服务器是否有任何问题,但同时有人有什么想法或建议吗?

更新:

事实证明,从负责生产服务器的团队那里获取信息很困难,但我设法发现就负载平衡而言,该站点目前仅在一台服务器上运行(可以这样做必要时切换到另一个)。鉴于这是一个间歇性问题并且只涉及一台服务器,那么我很难相信这可能是一个装配问题。当然,如果是这样,那么每次都会出现问题吗?

【问题讨论】:

  • 您在运行服务器场吗?如果是,您的所有项目的正确版本是否已部署到所有服务器?
  • 在这个实例中有两个负载平衡的服务器,并且都检查了程序集版本(我们显然也需要检查两个事件日志)。谢谢,克里斯
  • 你能发布 MyExceptionHelperClass 构造函数的方法签名吗?该错误似乎是说它找不到预期的构造函数。

标签: asp.net vb.net exception constructor


【解决方案1】:

如果您在启用了自定义错误的网站上看到此错误,则该错误发生在自定义错误处理例程本身中。

从 .NET 错误消息的外观看来,您的例程需要一个通过引用接受异常的构造函数 - 您上面的评论显示了一个按值接受的构造函数。

仔细检查您的系统中某处是否存在过时版本的程序集。这些可以潜伏在 Temporary ASP.NET Files 文件夹中;您需要先执行“iisreset /stop”,然后才能清除它们。

在这方面,确保将 AssemblyInfo.cs 设置为以某种方式自动标记版本号总是一个好主意。我们的版本号与我们的源代码存储库系统和 CI 构建框相关联,因此我们可以很容易地准确地知道什么是什么程序集。

【讨论】:

    【解决方案2】:

    我会使用 elmah:http://code.google.com/p/elmah/,希望能让您更深入地了解这个问题。它是免费的,无需重新编译即可在现有站点上使用。尝试一下 - 如果问题仍然存在,请回复。

    【讨论】:

      【解决方案3】:

      正如其他人也提到的,我怀疑您的网站以某种方式使用了过时的程序集版本。在部署到生产服务器之前,您可以尝试做一个完整的站点Precompile。这确保了 ASP .Net 不会动态编译站点,因此应该意味着它始终使用完全最新的代码。

      【讨论】:

      • 谢谢,我不认为这是一个过时的程序集,但预编译提示是一个很好的提示。
      【解决方案4】:

      您的代码中是否为 MyExceptionHelperClass 定义了无参数公共构造函数?或者该类是否意味着只有静态方法,在这种情况下它应该是一个静态类。

      public class MyExceptionHelperClass()
      {
         public MyExceptionHelperClass() { }
      }
      

      【讨论】:

      • 它不是一个静态类,因为它有自己的属性,我们传递它的实例。有很多构造函数,但它们都有参数。这是一个开始寻找的好地方吗?此外,它的 VB.Net(不幸的是)
      • 刚刚检查了代码,肯定有一个构造函数与出错的代码相对应。 “Catch ex As Exception ...抛出新错误。MyExceptionHelperClass(ex)”-“Public Sub New(ByVal InnerException As Exception)”
      • 你能发布你的 Errors.MyExceptionHelperClass 的完整代码吗?
      • 超过 1300 行,所以可能不是一个好主意。您可能已经猜到了,但出于上面代码的目的,我重命名了类和网站。你有什么特别想看的吗?
      • 您的服务器机器是否启用了调试并关闭了自定义错误?这可能会产生更多错误信息...
      【解决方案5】:

      不幸的是,这可能是错误消息几乎没有价值的情况之一。以我的经验,这类一般异常可能是由于配置问题或线程/应用程序域的错误逻辑造成的。例如,我曾多次尝试将同一个程序集加载到应用程序域中时遇到类似问题。

      您提到这很难重现。如果它只发生在生产场中的一台服务器上,则更有可能是配置问题(与那台机器有关)。如果它发生在多个服务器上,则可能是配置或线程。

      可能值得花一些时间查看围绕上述区域的更大代码库。根本原因可能不在这个类中。祝你好运!

      【讨论】:

        【解决方案6】:

        我认为这是保持编译版本一致性的框架问题。重复更新站点源时经常会看到相同类型的错误。试试像

        net stop iisadmin /y && del /q /f /s "%systemroot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\*.*" && iisreset
        

        【讨论】:

          【解决方案7】:

          我今天在网络表单页面上遇到了这个异常。我找到了一个解决方案,但我不确定它为什么会起作用。

          1. 将代码嵌套在“命名空间 [YourNamespace]”标签中。
          2. 将命名空间添加到 aspx 页面 'Inherits="PathStart.YourNameSpace.ClassName"' 中的 html Page 标记的 Inherits 属性。
          3. 重建
          4. 再次导航到该页面,您应该不会遇到异常。

          按照上述步骤操作后,我恢复了更改并且没有再次遇到异常。

          【讨论】:

          • 在网页表单页面后面的代码中向构造函数添加参数后,我再次遇到此错误。上述解决方案再次有效解决了该问题。
          猜你喜欢
          • 2015-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多