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


Устранение неполадок при переносе Windows Phone Silverlight в UWP

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

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

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

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

Если приложение завершает работу и все, что вы знаете, является то, что необработанное исключение было создано во время анализа разметки XAML, то это может быть результатом ссылки на отсутствующий ресурс (то есть ресурс, ключ которого существует для приложений Windows Phone Silverlight, но не для приложений Windows 10, таких как некоторые системные TextBlock стиле ключей). Кроме того, это может быть исключение, возникающее внутри 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>

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

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

Симптом Лекарство
Анализатор синтаксиса XAML или компилятор выдает ошибку "имя типа "<>" не существует в пространстве имен [...]." Если <имя_типа> является пользовательским типом, в XAML-разметке замените "clr-namespace" на "using" в объявлениях префиксов пространства имен и удалите все токены сборки. Для типов платформы это означает, что тип не применяется к универсальной платформе Windows (UWP), поэтому найдите эквивалент и обновите разметку. Примеры, с которыми вы можете столкнуться прямо сейчас, это phone:PhoneApplicationPage и shell:SystemTray.IsVisible.
Синтаксический анализатор XAML или компилятор выдает ошибку "член "<имя_члена>" не распознается или недоступен." или "свойство "<имя_свойства>" не найдено в типе [...].". Эти ошибки начнут отображаться после переноса некоторых имен типов, таких как корневой page. Член или свойство не применяется к UWP, поэтому найдите эквивалент и обновите разметку. Примеры, с которыми вы можете столкнуться прямо сейчас, это SupportedOrientations и Orientation.
Средство синтаксического анализа XAML или компилятор выдает ошибку "Присоединяемое свойство [...] не найдено [...]." или "Неизвестный присоединяемый член [...].". Это может быть вызвано типом, а не присоединенным свойством; В этом случае у вас уже будет ошибка для типа, и эта ошибка уйдет после исправления. Примеры, с которыми вы можете столкнуться прямо сейчас, это phone:PhoneApplicationPage.Resources и phone:PhoneApplicationPage.DataContext.
Анализатор XAML, компилятор или исключение времени выполнения выдает ошибку "Ресурс "<resourcekey>" не удалось разрешить.". Ключ ресурса не применяется к приложениям универсальной платформы Windows (UWP). Найдите правильный эквивалентный ресурс и обновите разметку. Примеры, с которыми вы можете столкнуться сразу, — это системные ключи стиля TextBlock, такие как PhoneTextNormalStyle.
Компилятор C# выдает ошибку "Тип или имя пространства имен '<name>' не удалось найти [...]" или "Тип или имя пространства имен '<name>' не существует в пространстве имен [...]" или "Тип или имя пространства имен '<name>' не существует в текущем контексте". Скорее всего, это означает, что компилятор еще не знает правильное пространство имен UWP для типа. Чтобы устранить эту проблему, используйте команду Visual Studio Разрешить.
Если API не находится в наборе API, известном как универсальное семейство устройств (иными словами, API реализуется в пакете SDK расширения), используйте пакеты SDK расширения.
В других случаях с портом ситуация может быть менее однозначной. Примеры, с которыми вы можете столкнуться прямо сейчас, это DesignerProperties и BitmapImage.
При запуске на устройстве приложение завершает работу или при запуске из Visual Studio отображается сообщение об ошибке "Не удается активировать приложение среды выполнения Windows 8.x [...]. Сбой запроса активации с ошибкой "Windows не удалось связаться с целевым приложением. Обычно это означает, что процесс целевого приложения прерван. […]". Проблема может заключаться в императивном коде, выполняемом в собственных страницах или привязанных свойствах (или других типах) во время инициализации. Кроме того, это может произойти при анализе XAML-файла, который будет отображаться при завершении работы приложения (если приложение запускается из Visual Studio, это будет начальная страница). Найдите недопустимые ключи ресурсов и (или) попробуйте выполнить некоторые инструкции в разделе Отслеживания проблем, в этом разделе.
Ошибка XamlCompiler WMC0055: Невозможно присвоить текстовое значение «<ваша геометрия потока>» свойству Clip типа RectangleGeometry В UWP тип приложения UWP Microsoft DirectX и XAML C++ UWP.
ошибка XamlCompiler WMC0001: неизвестный тип "RadialGradientBrush" в пространстве имен XML [...] UWP не поддерживает тип RadialGradientBrush. Удалите RadialGradientBrush из разметки и используйте другой тип приложения Microsoft DirectX и XAML C++ UWP.
ошибка XamlCompiler WMC0011: неизвестный элемент OpacityMask для элемента "<тип UIElement>" Приложение UWP Microsoft DirectX и XAML C++ UWP.
Первое случайное исключение типа System.Runtime.InteropServices.COMException произошло в SYSTEM. NI.DLL. Дополнительные сведения: приложение вызвало интерфейс, который был маршалирован для другого потока. (Исключение из HRESULT: 0x8001010E (RPC_E_WRONG_THREAD)). Работа, которую вы выполняете, должна выполняться в потоке пользовательского интерфейса. Вызовите CoreWindow.GetForCurrentThread).
Анимация выполняется, но она не влияет на своё целевое свойство. Либо сделать анимацию независимой, либо установить на неё EnableDependentAnimation="True". См. анимация.
При открытии проекта Windows 10 в Visual Studio появится сообщение "Требуется обновление Visual Studio. Для одного или нескольких проектов требуется версия пакета SDK <для платформы> , которая либо не установлена, либо включена в состав будущего обновления в Visual Studio". См. подраздел TargetPlatformVersion в этом разделе.
Исключение System.InvalidCastException возникает при вызове InitializeComponent в файле xaml.cs. Это может произойти, если у вас есть несколько файлов xaml (по крайней мере один из которых соответствует требованиям MRT) и они используют один и тот же файл xaml.cs, а элементы имеют атрибуты x:Name, которые несовместимы между двумя файлами xaml. Попробуйте добавить одно и то же имя в одни и те же элементы в обоих файлах XAML или полностью опустить имена.

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