기존 코드를 .NET Framework에서 .NET으로 포팅할 때 가장 일반적인 문제 중 일부는 .NET Framework에만 있는 API 및 기술에 대한 종속성입니다. Windows 호환성 팩은 이러한 기술을 대부분 제공하므로 .NET 애플리케이션과 .NET Standard 라이브러리를 훨씬 쉽게 빌드할 수 있습니다.
호환성 팩은 API 집합을 크게 늘리는 .NET Standard 2.0의 논리적 확장입니다. 기존 코드는 거의 수정하지 않고 컴파일됩니다. "모든 .NET 구현이 제공하는 API 집합" 약속을 지키기 위해 .NET Standard에는 레지스트리, WMI(Windows Management Instrumentation) 또는 리플렉션 내보내기 API와 같은 모든 플랫폼에서 작동할 수 없는 기술은 포함하지 않습니다. Windows 호환 기능 팩은 .NET Standard의 위에 있으며 해당 Windows 전용 기술에 대한 액세스 권한을 제공합니다. .NET으로 이동하려고 하지만 적어도 첫 번째 단계로 Windows에 머물려는 고객에게 특히 유용합니다. 이 시나리오에서는 Windows 전용 기술을 사용하여 마이그레이션 장애물을 제거할 수 있습니다.
Linux 또는 macOS에서 .NET 애플리케이션 또는 .NET Standard 라이브러리를 실행하려는 경우 플랫폼 호환성 분석기를 사용하여 플랫폼 간에 작동하지 않는 API의 사용량을 찾습니다.
이러한 API의 사용량을 제거하거나 플랫폼 간 대체 방법으로 바꾸거나 다음과 같은 플랫폼 검사를 사용하여 보호합니다.
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");
}