MissingMethodException в RELEASE сборке установки CAB - PullRequest
2 голосов
/ 03 декабря 2010

Я пытаюсь создать установочную CAB-версию приложения для мобильного устройства. Я могу запустить приложение через визуальную студию на эмуляторе, однако, когда я пытаюсь вручную установить кабину на эмуляторе и запустить программу, она сразу же появляется сообщение об ошибке «Неожиданная ошибка ...», нажимая на детали, которые она показывает мне имя программы, а затем «MissingMethodException» и это все, а не дополнительная информация о том, где искать.

У меня сейчас два проекта установки. Исходный проект установки, который всегда был настроен на явную ссылку на вывод «Debug Any CPU», который теперь встроен только в конфигурацию «Debug». Новый проект установки теперь явно ссылается на вывод «Relase Any CPU», который встроен только в конфигурацию Release.

Кажется, что это только проблема в сборке релиза, которая имеет отношение к делу. Я бы предпочел не выпускать отладочные версии кода в производственные среды.

После настройки приложения-загрузчика я получаю следующий вывод (имена пространств имен изменены на защищенные невинные)

Этот журнал фактически идентичен журналу отладки вплоть до восьми строк в нижней части этого журнала.

В журнале отладки после загрузки модуля System.Data.DataSetExtensions загружается модуль System.Xml.Linq, а затем после перенаправлений в конце журнала загружается множество дополнительных модулей, начиная с \Windows\GAC_System.SR_v3_5_0_0_cneutral_1.dll и около 80 строк попыток загрузить ресурсы, после чего загружается модуль Forms.

Новая попытка

После попытки создать свою собственную инфу я все еще получаю исключение MissingMethodException, но более подробно. Он жалуется, что не может загрузить определенный тип из одной из моих сборок.

Поскольку я видел, как приложение работает в режиме выпуска, я решил попробовать скопировать развернутые сборки и использовать их для создания моей кабины, которая не работала. Затем я сравнил сборки с теми сборками, которые я первоначально использовал для создания своей кабины, и они идентичны.

Это заставило меня поверить, что если я попытаюсь вручную запустить развернутую сборку релиза с устройства вручную, я все равно получу исключение MissingMethodException, и, разумеется, так оно и есть. В этом случае я получаю undelailed MissingMethodException.

Чтобы повторить этот момент, я заметил, что когда я нажимаю «Начать отладку» в Visual Studio с выбранной конфигурацией выпуска, программа запускается как исключение, однако, если я прекращаю отладку и пытаюсь вручную запустить то, что развернуто на устройстве, которое я получаю пустое исключение MissingMethodException. Если я делаю то же самое для отладочной версии, то есть «Начать отладку» в Visual Studio, а затем прекращаю отладку и вручную запускаю приложение с устройства, приложение работает нормально.

Если у кого-нибудь есть какие-либо идеи относительно того, что это может быть, это будет высоко оценено. Я так растерялся.

Ответы [ 2 ]

2 голосов
/ 03 декабря 2010

Включите журнал загрузчика в реестре и посмотрите, что он говорит, что не удается загрузить.

EDIT

Во-первых, я бы отказался от проекта CAB - инструмент просто отстой и просто добавляет, слишком много сложности, к тому, что на самом деле является довольно простым процессом создания файла CAB.

Вы знаете, что приложение работает, так как вы можете запустить его из отладчика. Возьмите эти релизные сборки и поместите их в папку. Создайте INF-файл (проект установки создает его, так что вы можете использовать его как «семя», если хотите), который описывает, как они должны быть упакованы, затем вручную запустите cabwiz.exe с этим INF (или создайте BAT-файл, что мы и делаем).

Я обнаружил много лет назад, что это был самый простой способ создания CAB, на которые можно было положиться, который можно было повторять и который можно было автоматизировать. Тот факт, что я использую командный файл и вручную свернутый INF даже после написания статьи MSDN по проекту CAB , довольно показателен.

0 голосов
/ 03 декабря 2010

CAB-проекты вызывают у меня проблемы, если я переключаюсь между DEBUG и RELEASE. Посмотрите свойства "файлов" в вашем проекте такси. Они указывают на вашу корзину \ DEBUG или bin \ RELEASE? Проект CAB не так хорош в переключении после того, как вы измените цель сборки. Это может вызвать исключение MissingMethodException при использовании общих проектов в решении.

Попробуйте воссоздать ваш CAB-проект для режима, для которого вы пытаетесь создать (DEBUG или RELEASE).

...