【问题标题】:MissingMethodException when no reflection used未使用反射时的 MissingMethodException
【发布时间】:2011-08-15 19:22:36
【问题描述】:

我有以下课程

public class Value
  {
    ...
    public virtual Unit Unit { get; set; }
  }

它在主模块引用的程序集中定义。在主模块中,有简单的代码

private void SaveData()
 {
   Value value = GetValue();

   //some code here
   Results.Add(new Result
   {
     Unit = (int)value.Unit,
   });
 }

在输入 SaveData 方法时,我得到 MissingMethod 异常。 SaveData 的执行甚至没有开始。以下是异常消息

找不到方法:'Unit Value.get_Unit()'。

怎么会这样?我根本不使用反射,那么这个异常来自哪里? 提前感谢您的帮助

【问题讨论】:

  • 我怀疑您以某种方式编译的库版本与您加载的版本不同。
  • 两个程序集在同一个目录中?

标签: c# .net


【解决方案1】:

您似乎在某一时刻添加了 Value.Unit 成员,但您正在运行包含 SaveData() 方法的程序集,该程序集针对的是另一个程序集的旧版本,在它包含此方法之前。因此,运行时期望一个方法存在,但它不存在。这会导致 SaveData() 的 JIT 编译失败,从而完全无法执行。

仔细检查此应用程序使用的所有程序集是否都是最新版本。

【讨论】:

  • 我查看了引用程序集的对象资源管理器方法 - 存在获取方法,并且我还尝试重建和更新引用。问题依然存在
  • 您是否打开了程序正在使用的确切程序集?尝试在运行时转储程序中所有已加载程序集的路径(确保在引用此其他程序集中的某些类型以强制运行时加载它之后执行此操作)。
  • 我删除了引用,清理并重新加载了解决方案,然后再次添加了引用。之后一切正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 2011-07-08
  • 2016-06-10
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
相关资源
最近更新 更多