MissingMethodException выдается при вызове новой формы в Compact Framework - PullRequest
1 голос
/ 10 февраля 2010

Я обновляю старое приложение для мобильных устройств для большей гибкости. Я в основном добавил возможность конфигурировать адрес нашего сервера SQL в случае, если мы хотим использовать наш тестовый сервер, а не наш рабочий сервер. Я не думаю, что это вызывает проблему, но я хотел заявить об этом. Я также модернизировал проект с проекта VS 2003 до проекта VS 2005.

У меня проблема в том, что при попытке запустить программу в эмуляторе VS для Pocket PC я получаю сообщение об ошибке. Это происходит после того, как наша форма «главного меню» загружается, и пользователь выбирает следующую форму для загрузки. Форма инициализируется без проблем, но когда мы пытаемся запустить метод .ShowDialog (), она генерирует исключение System.MissingMethodException.

У меня нет большого опыта работы с Compact Framework, и я действительно не знаю, с чего начать поиск проблем. Я прошел отладчик по всему процессу инициализации новой формы, и он запустился без проблем. Но, опять же, когда мы приходим к вызову ShowDialog, он выдает ошибку.

Буду очень признателен за любые идеи о том, с чего начать, или за известные проблемы.

Ответы [ 5 ]

1 голос
/ 27 января 2016

Возможная проблема, которая может вызвать эту ситуацию, заключается в том, что DLL не обновляется при развертывании. Это может быть вызвано тем, что рассматриваемая DLL является зависимостью для нескольких исполняемых файлов.

Например, допустим, исполняемый файл A запущен на устройстве и зависит от метода DLL callA. Вы пытаетесь отладить исполняемый файл B, который также зависит от DLL, но от только что добавленного метода callB. Когда Visual Studio переходит к развертыванию библиотеки DLL с callB, она не может этого сделать, потому что исполняемый файл A все еще использует ее. Visual Studio не сообщает вам, что не удалось развернуть DLL. (Лжец против!;)

Чтобы исправить это, убейте все исполняемые файлы, которые зависят от DLL, а затем разверните ее.

@ Феликс Алькала - Ты получил голос от меня. Я бы добавил это как комментарий к вашему исправлению, потому что оно напрямую связано. Увы, у меня не было представителя, чтобы сделать это. Но я хочу, чтобы этот ответ был публичным, потому что я нашел его полезным

1 голос
/ 15 июня 2010

Я должен был добавить это давно. В итоге ответом стало то, что на мобильном устройстве была установлена ​​неправильная версия .NET.

1 голос
/ 27 марта 2010

Я обычно получаю MissingMethodException по этой причине:

  • У меня есть как минимум два файла в моем проекте, например, файл .exe и файл .dll
  • Я делаю изменения в исходном коде DLL-файла и перекомпилирую
  • VS говорит, что развертывает новый файл .dll на устройстве, но на самом деле это не так (он сохраняет старый файл)
  • .exe запускается нормально, но когда он начинает доступ к файлу .dll, приложение выдает исключение MissingMethodException, поскольку оно не может найти методы в старом файле DLL.

Исправлено: удаление всего каталога приложения с устройства и повторное развертывание.

0 голосов
/ 31 марта 2010

Вы можете получить это исключение, если попытаетесь использовать обычный класс WinForm из компактного проекта.

0 голосов
/ 11 февраля 2010

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

Из-за этого одна хитрость в нахождении проблемы (если она не обнаружена) заключается в сокращении кода в ShowDialog до тех пор, пока вы не найдете строку, вызывающую проблему. Я бы начал комментировать ВСЕ код, чтобы подтвердить свою гипотезу. Если вы больше не получаете исключение, попробуйте раскомментировать примерно половину оставшегося кода за раз и т. Д.

...