1

У меня есть приложение Windows Phone 7.1, которое ссылается на библиотеку Windows Phone 7.1. Эта библиотека ссылается на PCL, который включает Windows Phone 7 или выше в качестве цели.Как устранить исключение TypeLoadException, которое не указывает тип?

В какой-то момент приложение пытается создать новый экземпляр класса из библиотеки, который расширяет класс из PCL. Класс PCL имеет защищенный конструктор, поэтому я переопределяю его в классе библиотеки, чтобы сделать его общедоступным. Конструктор принимает 1 параметр. В приложении я создаю экземпляр этого одного параметра и передаю его конструктору в библиотеке, который не имеет собственного кода, только : base() другому конструктору.

Я запускаю приложение в эмуляторе телефона Windows, и все идет хорошо. Приложение загружается, и я перемещаюсь по нескольким экранам.

Я ударил точку останова и прошел. Я приземляюсь в конструкторе библиотеки, но потом, когда я попытаюсь сделать еще один шаг, который будет в конструкторе PCL, я просто получаю исключение TypeLoadException, в котором говорится: «При загрузке типа произошел сбой». Трассировка стека останавливается в конструкторе библиотеки, и нет внутреннего исключения.

Я также пробовал эмулятор Windows Phone 7.8. И я также попытался создать новый экземпляр непосредственно в конструкторе класса библиотеки, используя конструктор без параметров, и просто сказал : base(new ...), но все это не так.

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

My google fu подходит к концу. У кого-нибудь есть идеи, в которых я мог бы продолжать искать?

Спасибо.

ответ

0

Я - кровавый идиот.

Так что, как и было указано, возникла проблема с загрузкой чего-либо из PCL, но это была такая эзотерическая ошибка, что .NET не был готов и просто запретил мне ничего не рассказывать.

Чтобы устранить эту проблему, я прокомментировал весь элемент конструктора, который запустил создание экземпляров нескольких других классов из PCL и установил их в переменные-члены. Это сработало.

Затем я начал расколоть биты конструктора, пока он не сработает снова. Превратил меня в один класс, который потерпел неудачу. Передавая его null для всех объектов, его конструктор все же вызвал исключение TypeLoadException, поэтому он должен был быть одним из параметров. Я удаляю все параметры, и он работает. Итак, я добавил параметры назад по одному, пока он не взорвался в моем лице.

Оказывается, корень моей проблемы заключается в том, что, несмотря на компиляцию под Windows 7 и Silverlight 4, PCL использовал функции, которые Windows Phone 7 фактически не поддерживает. А именно, совместные и контравариантные общие интерфейсы. Мне пришлось реорганизовать мой PCL, чтобы он мог обрабатывать инвариантные общие типы, и все происходит нормально.