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

Предыдущий раздел назывался Перенос проекта.

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

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

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

Если ваше приложение завершается и вы знаете только то, что возникло необработанное исключение во время анализа разметки 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> и запишите <имя>_папки_версии, которое будет иметь четырехкратную нотацию "Major.Minor.Build.Revision".
  • Откройте файл проекта для правки и найдите элементы TargetPlatformVersion и TargetPlatformMinVersion . Измените их так, чтобы они выглядели следующим образом, заменив <versionfoldername> номером версии четырехмерной нотации, который вы нашли на диске:
   <TargetPlatformVersion><versionfoldername></TargetPlatformVersion>
   <TargetPlatformMinVersion><versionfoldername></TargetPlatformMinVersion>

Признаки и средства устранения неполадок

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

Симптом Средство
Средство синтаксического анализа или компилятор XAML выдает ошибку"Имя "<typename>" не существует в пространстве имен [...]." Если <typename> является пользовательским типом, измените "clr-namespace" на "using" и удалите все маркеры сборки в объявлениях префикса пространства имен в разметке XAML. Для типов платформы: это значит, что тип не применяется в UWP, поэтому найдите его эквивалент и обновите разметку. Примеры, с которыми вы можете столкнуться уже сейчас — phone:PhoneApplicationPage и shell:SystemTray.IsVisible.
Средство синтаксического анализа или компилятор XAML выдает ошибку "Элемент "<имя_>члена" не распознается или недоступен" или "Свойство "<propertyname>" не найдено в типе [...].". Эти ошибки начнут появляться после переноса некоторых имен типов, например, корня Page. Член или свойство не применяются в UWP, поэтому найдите его эквивалент и обновите разметку. Примеры, с которыми вы можете столкнуться уже сейчас — SupportedOrientations и Orientation.
Средство синтаксического анализа или компилятор XAML выдает ошибку The attachable property [...] не был найден [...]". или "Неизвестный присоединяемый элемент [...]". Причиной этого скорее всего могут быть типы, а не присоединяемое свойство, потому что в этом случае у вас бы уже была ошибка в типах. Эта ошибка исчезнет, как только вы исправите это. Примеры, с которыми вы можете столкнуться уже сейчас — phone:PhoneApplicationPage.Resources и phone:PhoneApplicationPage.DataContext.
Средство синтаксического анализа, компилятор XAML, или исключение во время выполнения, выдает ошибку "Ресурс "<resourcekey>" не может быть разрешен.". Ключ ресурса не относится к приложениям 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: не удается присвоить текстовое значение "<your stream geometry>" свойству "Clip" типа "RectangleGeometry" В UWP тип приложения UWP Microsoft DirectX и XAML C++.
Ошибка WMC0001 XamlCompiler: Неизвестен тип RadialGradientBrush в пространстве имен XML [...] В UWP нет типа RadialGradientBrush. Удалите RadialGradientBrush из разметки и используйте другой тип приложения UWP Microsoft DirectX и XAML C++.
Ошибка XamlCompiler WMC0011: неизвестный элемент OpacityMask в элементе UIElement< type> Приложение 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.
При вызове метода InitializeComponent в файле xaml.cs создается исключение System.InvalidCastException. Это может случиться, если несколько XAML-файлов (по крайней мере один из которых MRT-совместимый) совместно используют один файл xaml.cs, а элементы имеют атрибуты x:Name, не совместимые между двумя XAML-файлами. Попробуйте добавить одно имя одинаковым элементам в обоих XAML-файлах или не используйте имена вовсе.

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