その他の移行ガイダンス

このトピックには、機能領域ガイドの機能領域に分類されていない追加の移行ガイダンスが含まれています。

条件付きコンパイル

このセクションの情報は、UWP と Windows App SDK プロジェクトの両方で同じソース コード ファイルを使用する場合に役立つことがあります。

Windows App SDK プロジェクトの C# ソース コードでは、WINDOWS_UWP というシンボルのプリプロセッサ ディレクティブを使用して、条件付きコンパイルを実行できます。

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

Windows App SDK プロジェクトの C++/WinRT ソース コードでは、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 に表示されます。 そのため、デバッガーでアプリを実行し、そのようなメッセージに注意してください。

イベント ハンドラーの登録解除 (C++/WinRT)

C++/WinRT プロジェクトでは、SizeChanged などのイベント ハンドラーを手動で取り消す (登録解除する) ことができます (詳細およびコード例については、「登録済みデリゲートの取り消し」を参照してください)。 ただし、手動で取り消す代わりに、手動での取り消しに問題がある場合に考慮できる代替手段として、C++/WinRT 自動イベント リボーカーの使用があります。 ここでも、詳細とコード例については、「登録済みデリゲートの取り消し」を参照してください。