Исключение отсутствующего метода - параметр Signature длинный, вызывается с int - PullRequest
1 голос
/ 23 марта 2012

Этот код компилируется и успешно выполняется локально, но не на другом сервере. Обе машины являются 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 Framework вызвать это? Что-то еще?

1 Ответ

3 голосов
/ 23 марта 2012

Это компилируется, поэтому я предполагаю, что можно передать int в метод, который ожидает long.

Нет, это не так - не на двоичном уровне. Это нормально на уровне исходный код , потому что компилятор превращает ваш код в:

GetItem((long) Id)

Но как только вы скомпилировали код, который использует метод, как если бы он получил параметр int, вы не можете изменить тип параметра, перекомпилировать только сборку, содержащую сам метод , а затем ожидать старый двоичный файл для работы. Вам также нужно будет перекомпилировать вызывающий код.

Если вы считаете, что вы используете один и тот же двоичный файл (как цель вызова) в обоих местах, то это должно быть что-то другое.

...