C#报”MissingMethodException”的原因以及解决办法

  • Post category:C#

当.Net应用程序在运行时报告MissingMethodException时,通常是因为代码中在调用方法时,未能成功找到该方法。这可能是由于以下原因导致的:

  1. 方法不存在:调用的方法名称与程序集中实际存在的方法名称不匹配。
  2. 程序集版本问题:调用的方法存在于程序集的一个版本中,但程序集加载器加载了另一个版本的程序集。
  3. 权限问题:调用方未被授权执行该方法,或该方法被标记为不可访问。

要解决这个问题,可以采取以下措施:

  1. 确认代码中方法名称是否正确,可能存在一些拼写错误或大小写不正确的问题。
  2. 确认程序集版本是否正确,在应用程序中可以通过使用Assembly Binding Log Viewer来检查程序集加载器加载的程序集版本。
  3. 确认程序集是否已正确加载,如果程序集未能正确加载,可以检查程序集名称和版本号是否正确。
  4. 确认调用方是否具有执行该方法所需的权限,可以适当调整程序的安全性设置。

以下是两个示例说明:

示例一:程序集版本问题

如果在客户端计算机上手动升级了应用程序,并且新的应用程序需要使用新的程序集,但升级过程中未将新的程序集复制到客户端计算机上,就会发生MissingMethodException。在这种情况下,可以通过使用Assembly Binding Log Viewer来确定程序集的版本是否正确加载。

示例二:权限问题

如果需要以管理员身份运行应用程序,但未以管理员身份运行应用程序,则会发生MissingMethodException。在这种情况下,需要以管理员身份运行应用程序,或者在程序中添加适当的代码,使其请求管理员权限。例如,可以在应用程序的程序清单文件中添加requestedExecutionLevel节点:

<requestedExecutionLevel level="requireAdministrator" />