Share via


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.