Дополнительные рекомендации по миграции

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

Условная компиляция

Сведения в этом разделе могут быть полезны, если вы планируете использовать один и тот же файл исходного кода как в UWP, так и в проекте Windows App SDK.

В исходном коде C# в проекте Windows App SDK можно использовать директивы препроцессора с символом WINDOWS_UWP для выполнения условной компиляции.

#if !WINDOWS_UWP
    // Win32/Desktop code, including Windows App SDK code
#else
    // UWP code
#endif

В исходном коде C++/WinRT в проекте Windows App SDK можно использовать директивы препроцессора с WINAPI_FAMILY_PC_APP для выполнения аналогичных действий. Или вместо этого можно использовать WINAPI_FAMILY_DESKTOP_APP . Комментарий в файле заголовка winapifamily.h указывает, что WINAPI_FAMILY_APP следует считать нерекомендуемой.

#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 через выходные данные отладки на панели Вывод . Поэтому запустите приложение в отладчике и watch для таких сообщений.

Отмена регистрации обработчика событий (C++/WinRT)

В проекте C++/WinRT можно вручную отозвать (отменить регистрацию) обработчик событий, например SizeChanged (дополнительные сведения и примеры кода см. в разделе Отзыв зарегистрированного делегата). Но альтернативой отзыву вручную ( и который можно рассмотреть при возникновении проблем с отзывом вручную) является использование автоматического отзыва событий C++/WinRT. Опять же, дополнительные сведения и примеры кода см. в разделе Отзыв зарегистрированного делегата.