Не удается загрузить собственную DLL

Это продолжение этого.

Проект Windows Phone 8 C# (MyApp), перенесенный из WP7.1. Я добавил в решение собственную библиотеку компонентов среды выполнения Windows (AppLib), создал ссылку. В нем есть общедоступный закрытый класс ссылки (MyClass). Ссылка на него есть в коде C# (в OnLoaded главной страницы XAML). Все это строится, то есть генерируются метаданные компонента.

Когда я пытаюсь запустить эмулятор, проект завершается ошибкой с исключением или вводом BadImageFormatException со следующим сообщением:

Была предпринята попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B)

Ошибка обычно появляется, когда вы пытаетесь смешать типы ЦП в .NET.

Активная платформа — «Смешанные платформы». В Configuration Manager он настроен на сборку MyApp для "x86" и AppLib для "Win32". В свежесгенерированном ванильном проекте, который работает нормально, конфигурация идентична.

Вопрос - что не так с этой конфигурацией? Что мне нужно проверить?

РЕДАКТИРОВАТЬ: я добавил в решение вторую пустую библиотеку C++ - TestLib. Этот загружается и работает как положено.

EDIT2: исключил все из сборки в AppLib - работает. Теперь я буду добавлять строки одну за другой, посмотрим, какая из них вызывает проблему...


person Seva Alekseyev    schedule 06.11.2012    source источник
comment
Является ли это компонентом Windows Phone WinRT?   -  person Paul Annetts    schedule 06.11.2012
comment
Тип проекта библиотеки — компонент среды выполнения Windows Phone. На странице свойств в разделе «Общие» указано «Windows Phone 8.0 (v110)».   -  person Seva Alekseyev    schedule 06.11.2012


Ответы (2)


Полностью моя вина. Когда я изменил пространство имен AppLib (см. связанный вопрос), я оставил одно маленькое объявление в библиотеке в пространстве имен MyApp.

Ошибка по-прежнему вводит в заблуждение. Я бы удалил вопрос, но, поскольку сообщение об ошибке обязательно отправит кого-то в погоню за дикими гусями с типом сборки ЦП и еще чем-то, пусть оно останется.

person Seva Alekseyev    schedule 06.11.2012

Не следует ли в большинстве случаев создавать библиотеку Windows Phone для ARM? У вас была возможность посмотреть «Windows Phone 8: Использование C++ в ваших приложениях" с конференции //Build/ на прошлой неделе? Это может включать некоторые ответы.

person Filip Skakun    schedule 06.11.2012
comment
Эмулятор WP8 - это x86, а не ARM. Есть еще одно работающее решение C#/C++ с идентичной конфигурацией (Win32 и x86). - person Seva Alekseyev; 06.11.2012
comment
Возможно, родная dll ссылается на библиотеку другого формата? - person Filip Skakun; 06.11.2012
comment
Я не добавлял в библиотеку никаких ссылок, кроме тех, что были на момент создания проекта. Я добавил кучу источников, хотя. Но они не относятся ни к чему, кроме ванильного RTL. - person Seva Alekseyev; 06.11.2012