Дополнительные рекомендации по миграции
В этом разделе содержатся дополнительные рекомендации по миграции, которые не классифицируются в области функций в руководствах по областям функций.
Условная компиляция
Сведения в этом разделе могут быть полезны, если планируется использовать один и тот же файл исходного кода как в UWP, так и в проекте пакета SDK для приложений Windows.
В исходном коде C# в проекте пакета SDK для приложений Windows можно использовать директивы препроцессора с символом WINDOWS_UWP для выполнения условной компиляции.
#if !WINDOWS_UWP
// Win32/Desktop code, including Windows App SDK code
#else
// UWP code
#endif
В исходном коде C++/WinRT в проекте пакета SDK для приложений Windows можно использовать директивы препроцессора с WINAPI_FAMILY_PC_APP для выполнения той же задачи. Или вместо этого можно использовать WINAPI_FAMILY_DESKTOP_APP . Комментарий в файле заголовка указывает, что WINAPI_FAMILY_APP следует считать нерекомендуемойwinapifamily.h
.
#if (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
// Win32/Desktop code, including Windows App SDK code
#else
// UWP code
#endif
Вы также можете использовать условную компиляцию в разметке XAML.
<Application
...
xmlns:nouwp="condition:!WINDOWS_UWP"
mc:Ignorable="nouwp">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!--Not Needed for UWP-->
<nouwp:XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!--Other merged dictionaries here-->
</ResourceDictionary.MergedDictionaries>
<!--Other app resources here-->
</ResourceDictionary>
</Application.Resources>
</Application>
См. также условные компиляции.
Отладка
Во время миграции приложение может находиться в состоянии, где разметка XAML содержит ссылки на ключи ресурсов XAML, но вы еще не определили эти ключи. Такое условие приводит к сбою во время выполнения, которое может быть несложно для отладки. Но в отладочной сборке сообщения о отсутствующих ключах ресурсов отображаются в Visual Studio с помощью выходных данных отладки в области вывода . Поэтому запустите приложение под отладчиком и следите за такими сообщениями.
Отмена регистрации обработчика событий (C++/WinRT)
В проекте C++/WinRT можно вручную отменить (отменить регистрацию) обработчик событий, например SizeChanged (дополнительные сведения и примеры кода, см. в разделе "Отзыв зарегистрированного делегата"). Но альтернатива ручному отзыву ( и одна из них, которую можно рассмотреть, если у вас возникли проблемы с отзывом вручную), — использовать автоматический отзыв событий C++/WinRT. Опять же, дополнительные сведения и примеры кода в отзыве зарегистрированного делегата.
См. также
Windows developer