我遇到上述异常的问题。我有一个相对简单的结构,分为两个dll。
第一个包含IEntityService,IEntity,具有基本实现。第二个包含实际的实现以及接口。所以有一个IMachine服务实现IEntityService和MachineService,它实现了IEntityService和EntityService。类似的情况发生在Result集合(实体加服务)上。此外,服务(机器和结果)是部分类/接口,其中一个类是自动生成的。
现在在其中一个ResultMachine中我试图获得一台机器,如果它不存在,我正在创建并保存。但是,当我尝试保存时,尝试从EntityService类访问保存方法时,我得到了“找不到方法”。但是,如果我在MachineService中包装EntityService.Save方法,它可以正常工作。
编辑:
不需要代码。决议是重新链接参考。什么误导我,我的dll不在GAC中,它与VS有关。更重要的是它没有强烈签名,唯一的区别是版本号。
答案 0 :(得分:9)
我们有几次出现此错误,您可以按如下方式重新创建问题:
现在,您将获得缺少异常的方法。原因是它正在使用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时遇到了问题。