다음을 통해 공유


Windows 호환성 팩을 사용하여 코드를 .NET으로 포팅

.NET Framework에서 .NET으로 기존 코드를 포팅할 때 발견되는 가장 일반적인 문제 중 일부는 .NET Framework에서만 찾을 수 있는 API 및 기술에 대한 종속성입니다. Windows 호환성 팩은 이러한 많은 기술을 제공하므로 .NET 애플리케이션 및 .NET Standard 라이브러리를 훨씬 쉽게 빌드할 수 있습니다.

호환성 팩은 API 집합을 크게 증가시키는 .NET Standard 2.0의 논리적 확장 입니다. 기존 코드는 거의 수정 없이 컴파일됩니다. .NET Standard는 "모든 .NET 구현에서 제공하는 API 집합"을 약속하기 위해 레지스트리, WMI(Windows Management Instrumentation) 또는 리플렉션 내보내기 API와 같은 모든 플랫폼에서 작동할 수 없는 기술을 포함하지 않습니다. Windows 호환성 팩은 .NET Standard를 기반으로 하며 이러한 Windows 전용 기술에 대한 액세스를 제공합니다. .NET으로 이동하지만 적어도 첫 번째 단계로 Windows에 머물 계획인 고객에게 특히 유용합니다. 이 시나리오에서는 Windows 전용 기술을 사용하여 마이그레이션 장애물을 제거할 수 있습니다.

패키지 내용

Windows 호환성 팩은 Microsoft.Windows.Compatibility NuGet 패키지를 통해 제공되며 .NET 또는 .NET Standard를 대상으로 하는 프로젝트에서 참조할 수 있습니다.

다음 기술 영역에서 Windows 전용 및 플랫폼 간 API를 포함하여 약 20,000개의 API를 제공합니다.

  • 코드 페이지
  • CodeDom
  • 구성 / 설정
  • 디렉터리 서비스
  • 그림
  • ODBC (오픈 데이터베이스 연결)
  • 권한
  • 항구
  • Windows ACL(액세스 제어 목록)
  • WCF(Windows Communication Foundation)
  • Windows 암호화
  • Windows 이벤트 로그
  • Windows 관리 도구 (WMI)
  • Windows 성능 카운터
  • Windows 레지스트리
  • Windows 런타임 캐싱
  • Windows 서비스

자세한 내용은 호환성 팩의 사양을 참조하세요.

시작하기

  1. 포팅하기 전에 포팅 프로세스를 살펴보세요.

  2. 기존 코드를 .NET 또는 .NET Standard로 포팅하는 경우 Microsoft.Windows.Compatibility NuGet 패키지를 설치합니다.

    Windows를 계속 사용하고 싶다면, 준비가 완료되었습니다.

  3. Linux 또는 macOS에서 .NET 애플리케이션 또는 .NET Standard 라이브러리를 실행하려면 플랫폼 호환성 분석기를 사용하여 플랫폼 간 작동하지 않는 API의 사용량을 찾습니다.

  4. 이러한 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");
    }
    

데모를 보려면 Windows 호환성 팩의 Channel 9 비디오를 확인하세요.