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


Устранение неполадок при переносе среда выполнения 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# выдает ошибку "Не удалось найти имя>< типа или пространства имен" или "Имя типа или пространства имен" или "Имя типа или<> пространства имен" не существует в пространстве имен [...]" или "Имя типа или<> пространства имен" не существует в текущем контексте. Это, скорее всего, означает, что тип реализован в пакете SDK расширения (хотя в некоторых случаях средство защиты не так просто). Используйте справочные материалы по API Windows, чтобы определить, какой пакет SDK расширений реализует API, а затем использовать команду "Добавить> ссылку" Visual Studio для добавления ссылки на этот пакет SDK в проект. Если ваше приложение предназначено для набора API, известного как универсальное семейство устройств, важно использовать класс ApiInformation для тестирования во время выполнения для наличия пакета SDK для расширений перед их вызовом (это называется адаптивным кодом). Если существует универсальный API, то это всегда предпочтительнее API в пакете SDK расширений. Дополнительные сведения см. в разделе "Пакеты SDK для расширения".

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