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



此代码在本地编译并成功运行,但不能在其他服务器上运行。这两台机器都是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框架的不同版本会导致这种情况吗?还有别的吗?

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

不,它不是——不是在二进制级别。在源代码级别是可以的,因为编译器会将代码转换为:

GetItem((long) Id)

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

如果你认为你在两个地方都使用了相同的二进制(作为调用的目标),那么它一定是其他东西。

最新更新