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
Innan du porterar bör du ta en titt på portningsprocessen.
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.
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.
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.