Share via


Zusätzliche Anleitungen zur Migration

Dieses Thema enthält zusätzliche Migrationshinweise, die nicht in einen Featurebereich in den Leitfäden des Featurebereichs kategorisiert sind.

Bedingte Kompilierung

Die Informationen in diesem Abschnitt können nützlich sein, wenn Sie die gleiche Quellcodedatei sowohl in einer UWP als auch in einem Windows App SDK-Projekt verwenden möchten.

Im C#-Quellcode in einem Windows App SDK-Projekt können Sie Präprozessordirektiven mit dem WINDOWS_UWP-Symbol verwenden, um eine bedingte Kompilierung durchzuführen.

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

Im C++/WinRT-Quellcode in einem Windows App SDK-Projekt können Sie Präprozessordirektiven mit WINAPI_FAMILY_PC_APP verwenden, um dasselbe zu tun. Alternativ können Sie stattdessen WINAPI_FAMILY_DESKTOP_APP verwenden. Ein Kommentar in der winapifamily.h Headerdatei gibt an, dass WINAPI_FAMILY_APP als veraltet gelten sollte.

#if (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
    // Win32/Desktop code, including Windows App SDK code
#else
    // UWP code
#endif

Sie können auch die bedingte Kompilierung im XAML-Markup verwenden.

<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>

Weitere Informationen finden Sie unter Bedingte Kompilierung.

Debuggen

Während des Migrationsprozesses befindet sich Ihre App möglicherweise in einem Zustand, in dem Ihr XAML-Markup Verweise auf XAML-Ressourcenschlüssel enthält, aber Sie haben diese Schlüssel noch nicht definiert. Eine solche Bedingung führt zu einem Laufzeitabsturz, der möglicherweise nicht einfach zu debuggen ist. In einem Debugbuild werden jedoch Meldungen über fehlende Ressourcenschlüssel in Visual Studio über die Debugausgabe im Bereich Ausgabe angezeigt. Führen Sie Also Ihre App unter dem Debugger aus, und watch für solche Nachrichten aus.

Aufheben der Registrierung eines Ereignishandlers (C++/WinRT)

In einem C++/WinRT-Projekt können Sie einen Ereignishandler wie SizeChanged manuell widerrufen (die Registrierung aufheben). (Weitere Details und Codebeispiele finden Sie unter Widerrufen eines registrierten Delegaten). Eine Alternative zum manuellen Widerruf – und eine, die Sie bei Problemen beim manuellen Widerrufen in Betracht ziehen können – ist jedoch die Verwendung eines automatischen C++/WinRT-Ereignisrückrufers. Weitere Details und Codebeispiele finden Sie unter Widerrufen eines registrierten Delegaten.