다음을 통해 공유


BinaryFormatter 마이그레이션 가이드

주의

BinaryFormatter으로 인해 사용하지 않도록 강력히 권장합니다. 기존 사용자는 .에서 BinaryFormatter멀리 마이그레이션해야 합니다.

.NET 9부터는 더 이상 런타임에 구현 BinaryFormatter 을 포함하지 않습니다. API는 여전히 존재하지만, 해당 구현은 프로젝트 유형에 관계없이 항상 예외를 발생시킵니다 PlatformNotSupportedException. 따라서 기존 이전 버전 호환성 플래그를 설정하는 것만으로는 BinaryFormatter을(를) 사용하는 데 충분하지 않습니다.

이 문제를 해결하는 두 가지 옵션이 있습니다.

사용 BinaryFormatter시의 위험은 무엇인가요?

개체를 생성할 정보가 포함될 수 있는 입력을 허용하는 역직렬화기는, 이진 또는 텍스트 형식에서 보안 문제가 발생할 가능성이 높은 취약점을 가지고 있습니다. CWE-502 "신뢰할 수 없는 데이터의 역직렬화" 문제를 설명하는 CWE(일반적인 약점 열거형)가 있습니다. BinaryFormatter는 2002년 .NET Framework의 초기 릴리스에 포함된 역직렬 변환기입니다. 이 내용은 BinaryFormater 보안 가이드에서도 다룹니다.

알려진 사용 BinaryFormatter위험으로 인해 기능이 .NET Core 1.0에서 제외되었습니다. 그러나 더 안전한 항목으로 마이그레이션할 명확한 경로가 없었기 때문에, 고객의 수요로 인해 BinaryFormatter이 .NET Core 2.0에 포함되었습니다. 그 이후로 .NET 팀은 여러 프로젝트 형식에서 기본적으로 BinaryFormatter를 점진적으로 비활성화하며 제거하기 위해 노력해 오고 있습니다. 이전 버전과의 호환성이 필요한 경우 소비자는 플래그를 통해 특정 프로젝트 형식에서 옵트인할 수 있습니다.

결정에 대한 자세한 내용은 .NET 9에서 제거됨에 대한 공지BinaryFormatter를 참조하세요.

마이그레이션 가이드에서 BinaryFormatter의 제거와 관련된 이슈가 해결되지 않은 경우에는, github.com/dotnet/runtime에 문제를 제출하고 해당 문제가 BinaryFormatter의 제거와 관련된 것임을 명시하세요.

마이그레이션 항목

BinaryFormatter에서 벗어난다는 것은 일반적으로 다른 직렬 변환기를 선택하는 것을 의미합니다. 그러나 일반적으로 인코딩된 데이터의 생산자와 소비자를 모두 제어하는 경우에만 수행할 수 있습니다. 생산자를 제어하지 않는 경우 인코딩된 형식을 인스턴스화하지 않고 페이로드를 읽기 BinaryFormatter 위해 새 API 로 이동할 수도 있습니다.

두 옵션 모두 아래에서 살펴보세요.

직렬 변환기를 선택합니다

마이그레이션 BinaryFormatter 의 첫 번째 단계는 해당 위치에서 사용할 serializer를 선택하는 것입니다. 특정 요구 사항에 따라 .NET 팀은 4개의 서로 다른 serializer로 마이그레이션할 것을 권장합니다.

읽기 BinaryFormatter (NRBF) 페이로드

많은 애플리케이션이 스토리지에 유지된 페이로드를 로드하고 역직렬화하며 모든 지속형 페이로드를 미리 변환할 수 있는 것은 아닙니다. 다른 시나리오에는 이러한 시스템을 독립적으로 마이그레이션해야 하는 경우 생성된 BinaryFormatter데이터를 수신하는 시스템 또는 서비스가 포함될 수 있습니다.

이러한 시나리오 및 기타 시나리오에서는 제공된 페이로드를 읽고 시간이 지남에 따라 새 형식으로 전환하기 위한 지원을 유지해야 합니다. 이러한 요구 사항을 충족하기 위해 범용 및 취약한 역직렬화를 수행하지 않고 로 생성한 BinaryFormatter를 안전하게 읽을 수 있습니다.

Windows Forms 및 WPF 애플리케이션 마이그레이션

Windows Forms 및 WPF 애플리케이션에는 추가 변경이 필요할 수 있습니다. 추가 마이그레이션 지침 은 Windows Forms 앱, WPF 앱WinForms/WPF 클립보드 및 끌어서 놓기 지침을 참조하세요.

관리 리소스 마이그레이션 (ResX)

가장 일반적인 리소스 종류(예: 문자열 및 아이콘)는 없이 BinaryFormatter작동합니다. 사용자 지정 형식의 경우, BinaryFormatter을 가져와서 호환성 스위치를 설정해야 합니다. 런타임 중 리소스 로드하기를 참조하세요.

호환성 패키지 사용

.NET 9로 업그레이드할 때 BinaryFormatter에서 마이그레이션할 수 없는 경우, 지원되지 않는 호환성 패키지를 사용할 수 있습니다. Serialization NuGet 패키지에는 취약성과 위험을 포함하여 의 기능적 구현이 포함되어 있습니다.

지원되지 않으며 권장되지는 않지만 호환성 패키지 사용에 대한 가이드에는 패키지를 설치하고 기능을 사용하도록 설정하기 위한 세부 정보가 포함되어 있습니다.

주의

BinaryFormatter으로 인해 사용하지 않도록 강력히 권장합니다. 기존 사용자는 .에서 BinaryFormatter멀리 마이그레이션해야 합니다.