没有使用反射的运行时C#“找不到方法”异常

时间:2010-09-30 18:31:04

标签: c# .net

我遇到上述异常的问题。我有一个相对简单的结构,分为两个dll。

第一个包含IEntityService,IEntity,具有基本实现。第二个包含实际的实现以及接口。所以有一个IMachine服务实现IEntityService和MachineService,它实现了IEntityService和EntityService。类似的情况发生在Result集合(实体加服务)上。此外,服务(机器和结果)是部分类/接口,其中一个类是自动生成的。

现在在其中一个ResultMachine中我试图获得一台机器,如果它不存在,我正在创建并保存。但是,当我尝试保存时,尝试从EntityService类访问保存方法时,我得到了“找不到方法”。但是,如果我在MachineService中包装EntityService.Save方法,它可以正常工作。

编辑:

不需要代码。决议是重新链接参考。什么误导我,我的dll不在GAC中,它与VS有关。更重要的是它没有强烈签名,唯一的区别是版本号。

5 个答案:

答案 0 :(得分:9)

我们有几次出现此错误,您可以按如下方式重新创建问题:

  • 使用2个dll创建项目(比如程序dll和测试dll)
  • 将程序dll部署到GAC
  • 添加新方法
  • 创建测试以测试新方法
  • 构建解决方案
  • 运行测试(不在调试模式下)

现在,您将获得缺少异常的方法。原因是它正在使用GAC中的旧版本的dll并且没有该方法。

有时它会使用旧版dll的缓存版本,IISreset可以提供帮助。

在您的情况下,检查任何旧版本的DLL。

答案 1 :(得分:6)

我的第一直觉是检查以确保程序集包含缺少方法的类。我想有可能装配没有立即更新?

答案 2 :(得分:3)

从不同的程序集引用“相同”类型时,请确保通过相同的路径加载所有内容。否则,实际上可以将相同类型视为不同类型。

有关详情,请参阅此文章:Fusion Loader Contexts - Unable to cast object of type 'Whatever' to type 'Whatever'

答案 3 :(得分:1)

当我进入并调整我的构建设置以输出到/ bin / Debug而不是仅仅/ bin时,当我还使用IIS从dev文件夹托管站点时,这发生在我身上。

在我的情况下,您需要将二进制文件放在与服务相同的文件夹中,并在bin文件夹中调整左侧旧版本,并将后续版本放入/ bin / Debug文件夹(和/ bin / Release)。

保持设置不变并进行后置构建操作以将位复制到一个级别,具有不同的IIS应用程序以进行调试/发布,或者完全部署到另一个文件夹。后者可能是最“正确的”,但就我的目的而言,我刚刚实现了轮转,我在服务的文件夹中有不同的版本。 HTH。

答案 4 :(得分:0)

在我的情况下,我刚刚部署在装有.NET 3.0(Windows XP)的计算机上,而编译目标是.NET 3.5。

此错误消息确实无用。

使用System.Runtime.Serialisation的DataContract时遇到了问题。