Поделиться через


Устранение неполадок при переносе среды выполнения Windows 8.x в UWP

Предыдущая тема была перенос проекта.

Мы настоятельно рекомендуем дочитать это руководство по переносу до конца, но также понимаем, что вы стремитесь двигаться вперед и достичь этапа, на котором ваш проект собирается и запускается. Для этого можно добиться временного прогресса, закомментировав или отключив любой несущественный код, а затем вернуться к устранению этого долга позже. Таблица симптомов и средств устранения неполадок в этом разделе может оказаться полезной на данном этапе, хотя не является полноценной заменой чтению следующих нескольких разделов. Вы всегда можете обращаться к таблице по мере изучения последующих тем.

Отслеживание проблем

Исключения синтаксического анализа XAML могут быть трудно диагностировать, особенно если в исключении нет значимых сообщений об ошибках. Убедитесь, что отладчик настроен для перехвата исключений первого шанса (чтобы попытаться и поймать исключение синтаксического анализа на ранней стадии). Вы можете проверить переменную исключения в отладчике, чтобы определить, имеет ли HRESULT или сообщение любую полезную информацию. Кроме того, проверьте окно вывода Visual Studio на сообщения об ошибках, сгенерированные анализатором XAML.

Если приложение завершает работу, и все, что вы знаете, является то, что необработанное исключение было создано во время анализа разметки XAML, то это может быть результатом ссылки на отсутствующий ресурс (то есть ресурс, ключ которого существует для универсальных приложений 8.1, но не для приложений Windows 10, таких как некоторые системные клавиши TextBlock style). Или это может быть исключение, возникающее внутри UserControl, пользовательского элемента управления или настраиваемой панели макета.

Последнее средство — это двоичное разделение. Удалите около половины разметки из страницы и повторно запустите приложение. Затем вы узнаете, находится ли ошибка где-то в половине, которую вы удалили (что теперь необходимо восстановить в любом случае) или в половине, которую вы сделали не удалить. Повторите процесс, разделив половину, содержащую ошибку, и так далее, пока не сосредоточитесь на проблеме.

TargetPlatformVersion

В этом разделе объясняется, что делать, если при открытии проекта Windows 10 в Visual Studio отображается сообщение "Требуется обновление Visual Studio. Для одного или нескольких проектов требуется версия пакета SDK <для платформы> , которая либо не установлена, либо включена в состав будущего обновления в Visual Studio".

  • Сначала определите номер версии установленного пакета SDK для Windows 10. Перейдите к C:\Program Files (x86)\Windows Kits\10\Include\<versionfoldername> и запишите <versionfoldername>, которая будет в четырехзначной нотации "Major.Minor.Build.Revision".
  • Откройте файл проекта для редактирования и найдите элементы TargetPlatformVersion и TargetPlatformMinVersion. Измените их таким образом, заменив <versionfoldername> номером версии с четырехзначным обозначением, найденным на диске:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
    <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Устранение неполадок: симптомы и методы устранения

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

Симптом Лекарство
При открытии проекта Windows 10 в Visual Studio появится сообщение "Требуется обновление Visual Studio. Для одного или нескольких проектов требуется версия пакета SDK <для платформы> , которая либо не установлена, либо включена в состав будущего обновления в Visual Studio". См. подраздел TargetPlatformVersion в этом разделе.
Исключение System.InvalidCastException возникает при вызове InitializeComponent в файле xaml.cs. Это может произойти, если у вас есть несколько файлов xaml (по крайней мере один из которых соответствует требованиям MRT) и они используют один и тот же файл xaml.cs, а элементы имеют атрибуты x:Name, которые несовместимы между двумя файлами xaml. Попробуйте добавить одно и то же имя в одни и те же элементы в обоих файлах XAML или полностью опустить имена.
При запуске на устройстве приложение завершает работу или при запуске из Visual Studio отображается сообщение об ошибке "Не удается активировать приложение среды выполнения Windows 8.x [...]. Сбой запроса активации с ошибкой "Windows не удалось связаться с целевым приложением. Обычно это означает, что процесс целевого приложения прерван. […]". Проблема может заключаться в императивном коде, выполняемом в собственных страницах или привязанных свойствах (или других типах) во время инициализации. Или это может произойти при анализе XAML-файла, который будет отображаться при завершении работы приложения (если приложение запускается из Visual Studio, это будет начальная страница). Найдите недопустимые ключи ресурсов и (или) воспользуйтесь некоторыми рекомендациями в разделе "Отслеживание проблем" в этом разделе.
Анализатор XAML, компилятор или исключение времени выполнения выдает ошибку "Ресурс "<resourcekey>" не удалось разрешить.". Ключ ресурса не применяется к приложениям универсальной платформы Windows (UWP) (например, к некоторым ресурсам Windows Phone). Найдите правильный эквивалентный ресурс и обновите разметку. Примеры, которые могут встретиться сразу, — системные ключи, такие как PhoneAccentBrush.
Компилятор C# выдает ошибку "Тип или имя пространства имен '<name>' не удалось найти [...]" или "Тип или имя пространства имен '<name>' не существует в пространстве имен [...]" или "Тип или имя пространства имен '<name>' не существует в текущем контексте". Это, скорее всего, означает, что тип реализован в SDK расширения (хотя в некоторых случаях решение не так просто). Используйте справочные материалы API Windows ,, чтобы определить, какой пакет SDK расширений реализует API, затем используйте команду Visual Studio Добавить>ссылку, чтобы добавить ссылку на этот пакет SDK в проект. Если ваше приложение предназначено для набора API, известного как универсальное семейство устройств, важно использовать класс ApiInformation для проверки наличия расширения SDK во время выполнения перед их вызовами (это называется адаптивным кодом). Если существует универсальный API, то это всегда предпочтительнее API в пакете SDK расширений. Дополнительную информацию см. в пакетах SDK для расширений .

Следующая тема — это перенос XAML ипользовательского интерфейса.