2015-07-08 3 views
0

Я использую класс EasClientDeviceInformation для получения информации об устройстве пользователя.Получение InvalidCastException при получении SystemFirmwareVersion с использованием EasClientDeviceInformation

Используя эти две линии

EasClientDeviceInformation deviceInfo = new EasClientDeviceInformation(); 
var version = deviceInfo.SystemFirmwareVersion; 

генерирует InvalidCastException на второй линии. Полная деталь ошибка:

Невозможно привести объект типа «Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation» ввести «Windows.Security.ExchangeActiveSyncProvisioning.IEasClientDeviceInformation2

Этот код очень стандартный и только заставляет меня думать, что для моей системы SystemFirmwareVersion может быть недоступен. Однако я не понимаю, почему это обязательно должно бросать исключение кастинга. Очевидно, что приведение от EasClientDeviceInformation к IEasClientDeviceInformation2 вызывает проблему здесь, но это внутреннее значение для класса EasClientDeviceInformation, а не для моего собственного кода. Почему это произойдет?

ответ

1

Ваше сообщение помечено как windows-10, так и windows-8.1, что сбивает с толку.

Интерфейс 2 вообще отсутствует в Windows 8.1 (он был введен в Windows Phone), поэтому этот код никогда не будет работать на настольных компьютерах Windows 8.1 (и вы не сможете скомпилировать код с использованием по умолчанию шаблоны проектов).

Интерфейс 2 существует в Windows 10, но вы можете использовать более раннюю версию ОС, которая еще не реализована; предложите обновить до последней сборки ('162 или выше). При этом I думает, что это свойство всегда возвращает пустую строку на рабочем столе.

[Добавление 7/10/2015]

Другая вещь, чтобы помнить о том, что, поскольку этот API не существует во всех семьях устройств (только мобильные и Desktop), вы должны использовать ApiInformation class для проверки наличие API перед его использованием в Windows 10. Таким образом, ваше приложение не будет сбой при работе на Xbox или другом устройстве.

Смежные вопросы