У меня есть проект, который имеет следующую структуру:
- Клиент WP7 (ссылки 2)
- Портативная библиотека (общая)
- Служба WCF (ссылки 2)
объявление 1) Клиент также содержит ссылку службы на службу (3) с типами, повторно используемыми из (2).
объявление 2) Библиотека содержит контракты данных (DataContract
), используемые как службой, так и клиентами.
Все идет нормально. Все отлично работает на эмуляторе WVGA 512 Мб. Но когда я запускаю его на реальном устройстве или эмуляторе 7.1. Он бросает MissingMethodException
где-то при построении класса (неизвестный класс).
Я смог сузить его (после нескольких часов комментариев) до контрактов в библиотеке (2). Всякий раз, когда код касается любого класса в переносимой библиотеке, возникает это исключение. Клиент (1) содержит ссылку (copy local == true). Не знаю, что еще я могу сделать.
Клиент — WP7.1, переносимая библиотека — .NET4+/SL4+/WP7+, а служба — .NET 4.5.
Почему это происходит, как использовать классы в переносимой библиотеке из WP7 на реальном устройстве (и/или эмуляторе 7.1).
Обновление: я переместил контракты данных в клиентский (1) проект. Но когда к ним обращаются, выдается то же самое исключение TargetInvocationException
(с внутренним MissingMethodException
). Я озадачен. Подозреваю теперь атрибут DataContract
.
Обновление 2: это также не атрибут DataContract
. Классы являются производными от абстрактного универсального класса. Я попробую пометить его атрибутом KnownType
, если это поможет.
Обновление 3: это базовый класс. Я удалил его общий компонент, и он все еще не работает. Поэтому я полностью убрал базовый класс, и теперь он работает. Но почему это не работает? Это работает для сервиса, работает для эмулятора WVGA, почему не для устройства? Я пытался поставить KnownType
в базовый класс, даже в подклассы. Ничего не работает.