Het Windows-compatibiliteitspakket gebruiken om code over te zetten naar .NET

Enkele van de meest voorkomende problemen bij het overzetten van bestaande code van .NET Framework naar .NET zijn afhankelijk van API's en technologieën die alleen in .NET Framework worden gevonden. Het Windows-compatibiliteitspakket biedt veel van deze technologieën, dus het is veel eenvoudiger om .NET-toepassingen en .NET Standard-bibliotheken te bouwen.

Het compatibiliteitspakket is een logische extensie van .NET Standard 2.0 die de API-set aanzienlijk verhoogt. Bestaande code wordt gecompileerd met bijna geen wijzigingen. Om de belofte te behouden van 'de set API's die alle .NET-implementaties bieden', bevat .NET Standard geen technologieën die niet op alle platforms kunnen werken, zoals register, Windows Management Instrumentation (WMI) of reflectie-emit-API's. Het Windows-compatibiliteitspakket bevindt zich boven op .NET Standard en biedt toegang tot deze windows-technologieën. Het is vooral handig voor klanten die willen overstappen op .NET, maar die windows willen blijven gebruiken, in ieder geval als eerste stap. In dat scenario kunt u windows-technologieën gebruiken om de migratiehap te verwijderen.

Inhoud van pakket

Het Windows-compatibiliteitspakket wordt geleverd via het NuGet-pakket Microsoft.Windows.Compatibility en kan worden verwezen vanuit projecten die gericht zijn op .NET of .NET Standard.

Het biedt ongeveer 20.000 API's, waaronder alleen Windows- en platformoverschrijdende API's van de volgende technologiegebieden:

  • Codepagina's
  • CodeDom
  • Configuratie
  • Directoryservices
  • Tekening
  • ODBC
  • Machtigingen
  • Poorten
  • Windows Access Control Lists (ACL)
  • Windows Communication Foundation (WCF)
  • Windows-cryptografie
  • Windows EventLog
  • Windows Management Instrumentation (WMI)
  • Windows-prestatiemeteritems
  • Windows-register
  • Windows Runtime Opslaan in cache
  • Windows-services

Zie de specificatie van het compatibiliteitspakket voor meer informatie.

Aan de slag

  1. Voordat u overgaat, moet u het overdrachtsproces bekijken.

  2. Wanneer u bestaande code overdrat naar .NET of .NET Standard, installeert u het NuGet-pakket Microsoft.Windows.Compatibility.

    Als u windows wilt blijven gebruiken, bent u klaar.

  3. Als u de .NET-toepassing of .NET Standard-bibliotheek in Linux of macOS wilt uitvoeren, gebruikt u de platformcompatibiliteitsanalyse om het gebruik van API's te vinden die niet platformoverschrijdend werken.

  4. Verwijder het gebruik van deze API's, vervang ze door platformoverschrijdende alternatieven of beveilig ze met behulp van een platformcontrole, zoals:

    private static string GetLoggingPath()
    {
        // Verify the code is running on Windows.
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
            {
                if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
                    return configuredPath;
            }
        }
    
        // This is either not running on Windows or no logging path was configured,
        // so just use the path for non-roaming user-specific data files.
        var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
        return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
    }
    

Bekijk de Channel 9-video van het Windows-compatibiliteitspakket voor een demo.