1

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

这是电话:

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

这是被调用的方法签名:

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

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

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

4

1 回答 1

3

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

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

GetItem((long) Id)

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

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

于 2012-03-22T20:24:12.967 回答