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


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

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

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

Сведения в этом разделе могут быть полезны, если планируется использовать один и тот же файл исходного кода как в 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. Опять же, дополнительные сведения и примеры кода в отзыве зарегистрированного делегата.

См. также