2010-09-30 49 views
12

我遇到了上述异常的问题。我有一个相对简单的结构分开在两个DLL中。C#“未找到方法”异常运行时不使用反射

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

现在在ResultMachine的其中一个中,我试图获取一台机器,并且在它不存在的情况下,我正在创建它并保存。但是,当我试图保存时,我试图从EntityService类访问保存方法时,得到了“找不到方法”。但是,如果我在一个MachineService中包装EntityService.Save方法,它没有任何异常。

被修改:

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

+2

你可以发布实例化你的'ResultMachine'的代码,你尝试使用的接口和实现吗? – Oded 2010-09-30 18:34:26

回答

6

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

9

我们有这个错误几次,你可以按如下重现问题:

  • 创建的项目有2 DLL的(比如程序的DLL和测试DLL)
  • 部署程序的DLL GAC
  • 添加新的方法
  • 创建测试来测试新方法
  • 构建解决方案
  • 运行测试(在调试模式)

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

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

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

+0

当开发环境持有对dll的引用时,我也偶尔会得到这个。关闭开发环境然后重新打开它将解决该问题。 – Jay 2013-03-14 20:43:37

1

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

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

既可以保持设置原样并具有构建操作以将位复制到一个级别,具有用于调试/发布的不同IIS应用程序,也可以完全部署到另一个文件夹。后者可能是最“正确的”,但对于我的目的,我刚刚意识到经过多轮转动,我在服务的文件夹中有不同的版本。 HTH。

0

在我的情况下,我刚刚部署在.NET 3.0(Windows XP)的机器上,而编译目标已经.NET 3.5。

此错误消息确实没有帮助。

问题来自System.Runtime.Serialisation的DataContract的使用。

相关问题