缺少方法异常 - 签名参数很长,使用int调用

时间:2012-03-22 20:21:05

标签: c# exception missingmethodexception

此代码编译并在本地成功运行,但不在另一台服务器上运行。这两台机器都是64位操作系统。

这是电话:

retItem = (DataCollectionSetValueHeader)new DataCollectionSetValueHeaderLogic().GetItem(Id);  // Id is an int.

这是被调用的方法签名:

public DataCollectionSetValueHeader GetItem(long entityID)  // This one is obviously a long

这个编译,所以我假设将int传递给期望长的方法是可以的。但问题是,为什么这会在本地工作,但在另一台机器上出现“MissingMethodException”失败?

我们正在努力解决这个问题。 .NET框架的不同版本会导致这种情况吗?还有别的吗?

1 个答案:

答案 0 :(得分:3)

  

这个编译,所以我假设将int传递给期望长的方法是可以的。

不,不是 - 不是二进制级别。在源代码级别没关系,因为编译器会将您的代码转换为:

GetItem((long) Id)

但是一旦你编译了使用方法的代码就好像它有一个int参数一样,你就不能改变参数类型,只重新编译包含方法本身的程序集然后期望旧的二进制文件工作。您还需要重新编译调用代码。

如果你认为你在两个地方都使用相同的二进制文件(作为电话的目标),那么它必须是别的。