Устранение неполадок при переносе Windows Phone Silverlight в UWP
Предыдущий раздел — перенос проекта.
Мы настоятельно рекомендуем ознакомиться с этим руководством по переносу, но мы также понимаем, что вы хотите подготовиться к работе и перейти к этапу сборки и запуска проекта. Для этого можно добиться временного прогресса, закомментируя или замечая любой неуклюжный код, а затем возвращаясь к выплате этого долга позже. Таблица устранения неполадок с симптомами и средствами защиты в этом разделе может быть полезной на этом этапе, хотя это не замена для чтения следующих нескольких разделов. Вы всегда можете ссылаться на таблицу по мере выполнения в последующих разделах.
Отслеживание проблем
Исключения синтаксического анализа XAML могут быть трудно диагностировать, особенно если в исключении нет значимых сообщений об ошибках. Убедитесь, что отладчик настроен для перехвата исключений первого шанса (чтобы попытаться и поймать исключение синтаксического анализа на ранней стадии). Вы можете проверить переменную исключения в отладчике, чтобы определить, имеет ли HRESULT или сообщение любую полезную информацию. Кроме того, проверьте окно вывода выходных данных Visual Studio для сообщений об ошибках с помощью средства синтаксического анализа XAML.
Если приложение завершает работу, и все, что вы знаете, что необработанное исключение было вызвано во время анализа разметки XAML, то это может быть результатом ссылки на отсутствующий ресурс (то есть ресурс, ключ которого существует для приложений Windows Phone Silverlight, но не для приложений 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>
Устранение неполадок с симптомами и средствами защиты
Сведения об исправлении в таблице предназначены для того, чтобы предоставить достаточно информации, чтобы разблокировать себя. Вы найдете дополнительные сведения о каждой из этих проблем при чтении более поздних разделов.
Симптом | Средство |
---|---|
Средство синтаксического анализа XAML или компилятор дает ошибку "Имя< типа>" не существует в пространстве имен [...]". | Если <имя> типа является пользовательским типом, в объявлениях префикса пространства имен в разметке XAML измените значение clr-namespace на using и удалите все маркеры сборки. Для типов платформы это означает, что тип не применяется к универсальная платформа Windows (UWP), поэтому найдите эквивалент и обновите разметку. Примеры, которые вы можете столкнуться phone:PhoneApplicationPage сразу же, и shell:SystemTray.IsVisible . |
Средство синтаксического анализа XAML или компилятор дает ошибку "Имя участника<" не распознано или недоступно. Или свойство "propertyname>><" не найдено в типе [...]. | Эти ошибки начнут отображаться после переноса некоторых имен типов, таких как корневая страница. Член или свойство не применяется к UWP, поэтому найдите эквивалент и обновите разметку. Примеры, которые вы можете столкнуться SupportedOrientations сразу же, и Orientation . |
Средство синтаксического анализа XAML или компилятор дает ошибку "Присоединенное свойство [...] не найден [...]". или "Неизвестный присоединенный член [...]". | Это может быть вызвано типом, а не присоединенным свойством; В этом случае у вас уже будет ошибка для типа, и эта ошибка уйдет после исправления. Примеры, которые вы можете столкнуться phone:PhoneApplicationPage.Resources сразу же, и phone:PhoneApplicationPage.DataContext . |
Средство синтаксического анализа XAML или компилятор или исключение среды выполнения дает ошибку "Не удалось устранить ресурс resourcekey><". | Ключ ресурса не применяется к приложениям универсальная платформа Windows (UWP). Найдите правильный эквивалентный ресурс и обновите разметку. Примеры, которые могут возникнуть сразу, — это системные ключи стиля TextBlock , такие как PhoneTextNormalStyle . |
Компилятор C# выдает ошибку "Не удалось найти имя>< типа или пространства имен" или "Имя типа или пространства имен" или "Имя типа или<> пространства имен" не существует в пространстве имен [...]" или "Имя типа или<> пространства имен" не существует в текущем контексте. | Скорее всего, это означает, что компилятор еще не знает правильное пространство имен UWP для типа. Чтобы устранить эту проблему, используйте команду "Разрешить Visual Studio". Если API не находится в наборе API, известном как универсальное семейство устройств (иными словами, API реализуется в пакете SDK расширения), используйте пакеты SDK расширения. В других случаях порт может быть менее простым. Примеры, которые вы можете столкнуться DesignerProperties сразу же, и BitmapImage . |
При запуске на устройстве приложение завершает работу или при запуске из Visual Studio отображается сообщение об ошибке "Не удается активировать приложение среда выполнения Windows 8.x [...]. Сбой запроса активации с ошибкой "Windows не удалось связаться с целевым приложением. Обычно это означает, что процесс целевого приложения прерван. […]”. | Проблема может быть императивным кодом, выполняемым в собственных страницах или в привязанных свойствах (или других типах) во время инициализации. Кроме того, это может произойти при анализе XAML-файла, который будет отображаться при завершении работы приложения (если приложение запускается из Visual Studio, это будет начальная страница). Найдите недопустимые ключи ресурсов и (или) воспользуйтесь некоторыми рекомендациями в разделе "Отслеживание проблем " в этом разделе. |
Ошибка XamlCompiler WMC0055: невозможно назначить текстовое значение "<геометрия потока>" свойству Clip типа "RectangleGeometry" | В UWP тип приложения Microsoft DirectX и XAML C++ UWP. |
Ошибка XamlCompiler WMC0001: неизвестный тип "RadialGradientBrush" в пространстве имен XML [...] | UWP не имеет типа RadialGradientBrush . Удалите radialGradientBrush из разметки и используйте другой тип приложения Microsoft DirectX и XAML C++ UWP. |
Ошибка 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 в этом разделе. |
Исключение System.InvalidCastException возникает при вызове InitializeComponent в файле xaml.cs. | Это может произойти, если у вас есть несколько xaml-файлов (по крайней мере одно из которых имеет право на использование MRT) одинаковые xaml.cs файлы и элементы имеют атрибуты x:Name, которые несовместимы между двумя файлами XAML. Попробуйте добавить одно и то же имя в одни и те же элементы в обоих файлах XAML или полностью опустить имена. |
Следующий раздел — перенос XAML и пользовательского интерфейса.