Använd Windows Compatibility Pack för att portkoda till .NET

Några av de vanligaste problemen som hittas när du porterar befintlig kod från .NET Framework till .NET är beroenden av API:er och tekniker som bara finns i .NET Framework. Windows-kompatibilitetspaketet innehåller många av dessa tekniker, så det är mycket enklare att skapa .NET-program och .NET Standard-bibliotek.

Kompatibilitetspaketet är ett logiskt tillägg av .NET Standard 2.0 som avsevärt ökar API-uppsättningen. Befintlig kod kompileras nästan utan ändringar. För att hålla löftet om "den uppsättning API:er som alla .NET-implementeringar tillhandahåller" innehåller .NET Standard inte tekniker som inte kan fungera på alla plattformar, till exempel register, Windows Management Instrumentation (WMI) eller reflektionsemitterande API:er. Windows Compatibility Pack ligger ovanpå .NET Standard och ger åtkomst till dessa Windows-tekniker. Det är särskilt användbart för kunder som vill flytta till .NET men planerar att stanna i Windows, åtminstone som ett första steg. I det scenariot kan du använda windowsbaserade tekniker som tar bort migreringshindret.

Paketinnehåll

Windows Compatibility Pack tillhandahålls via NuGet-paketet Microsoft.Windows.Compatibility och kan refereras från projekt som är avsedda för .NET eller .NET Standard.

Den innehåller cirka 20 000 API:er, inklusive API:er för endast Windows och plattformsoberoende från följande teknikområden:

  • Kodsidor
  • CodeDom
  • Konfiguration
  • Katalogtjänster
  • Rita med penna
  • ODBC
  • Behörigheter
  • Hamnar
  • Windows-åtkomstkontrollistor (ACL)
  • Windows Communication Foundation (WCF)
  • Windows-kryptografi
  • Windows EventLog
  • Windows Management Instrumentation (WMI)
  • Windows-prestandaräknare
  • Windows-registret
  • Windows Runtime-Cachelagring
  • Windows-tjänster

Mer information finns i specifikationen av kompatibilitetspaketet.

Kom igång

  1. Innan du porterar bör du ta en titt på portningsprocessen.

  2. När du porterar befintlig kod till .NET eller .NET Standard installerar du NuGet-paketet Microsoft.Windows.Compatibility.

    Om du vill stanna kvar i Windows är allt klart.

  3. Om du vill köra .NET-programmet eller .NET Standard-biblioteket på Linux eller macOS använder du analysverktyg för plattformskompatibilitet för att hitta användning av API:er som inte fungerar plattformsoberoende.

  4. Ta antingen bort användningen av dessa API:er, ersätt dem med plattformsoberoende alternativ eller skydda dem med hjälp av en plattformskontroll, till exempel:

    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");
    }
    

En demo finns i Channel 9-videon i Windows Compatibility Pack.