다음을 통해 공유


BinaryFormatter serialization API에서 컴파일러 오류를 생성

BinaryFormatter 장기 사용 중단 계획의 일환으로 라이브러리에서 기능을 단계적으로 제거하고 BinaryFormatter 형식의 사용을 개발자에게서 줄이고 있습니다. .NET 7부터 다음 API를 호출하면 모든 C# 및 Visual Basic 프로젝트 형식에서 컴파일 시간 오류가 발생합니다.

이전 동작

.NET 5 이후 영향을 받는 Serialize 메서드와 Deserialize 메서드를 사용하면 ID가 있는 컴파일러 SYSLIB0011가 생성되었습니다. 자세한 내용은 ASP.NET 앱에서 BinaryFormatter serialization 메서드가 사용되지 않으며 금지됨(.NET 5)을 참조하세요.

Exception.SerializeObjectState 이벤트를 사용하면 오류가 발생하지 않았습니다.

새 동작

.NET 7부터 코드에서 영향을 받는 API를 사용하면 동일한 ID의 컴파일러 SYSLIB0011 발생합니다. 프로젝트가 다음 조건을 모두 충족하는 경우 영향을 받습니다.

  • C# 또는 Visual Basic 프로젝트입니다.
  • net7.0 또는 그 이상을 목표로 합니다.
  • 영향을 받는 API 중 하나를 직접 호출합니다.
  • SYSLIB0011 경고 코드를 아직 억제하지 않습니다.

도입된 버전

.NET 7

파괴적 변경 유형

이 변경 사항은 소스 호환성에 영향을 줄 수 있습니다.

변경 이유

BinaryFormatter 장기 사용 중단 계획의 일환으로 라이브러리에서 기능을 단계적으로 제거하고 BinaryFormatter 형식의 사용을 개발자에게서 줄이고 있습니다.

가장 좋은 조치는 보안 및 안정성 결함 때문에 BinaryFormatter에서 다른 곳으로 마이그레이션하는 것입니다. BinaryFormatter 는 이후 릴리스에서 .NET에서 제거될 수 있습니다. .NET 라이브러리 팀은 최근의 System.HalfSystem.DateOnly 같은 형식들이 BinaryFormatter와 호환되지 않는다는 입장을 이미 취했습니다.

오류를 억제해야 하는 경우 원래 사용되지 않는 문서의 지침을 따라 그렇게 할 수 있습니다. 오류를 다시 경고(.NET 5/6 동작과 일치)로 변환하는 프로젝트 속성을 설정하여 프로젝트 전체에서 오류를 사용하지 않도록 설정할 수도 있습니다.

경고

이 속성을 설정하면 호스트 동작이 변경될 수 있습니다. EnableUnsafeBinaryFormatterSerialization< 속성을 참조하세요>.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

비고

프로젝트가 "경고를 오류로 처리"하도록 설정하여 컴파일하는 경우에도 컴파일이 여전히 실패합니다. .NET 5 및 .NET 6 SDK에 제공된 동작과 일치합니다. 그렇다면 원본 또는 프로젝트 파일의 SYSLIB0011 요소에서 <NoWarn> 경고를 억제해야 합니다.

<EnableUnsafeBinaryFormatterSerialization> 속성

이 속성은 <EnableUnsafeBinaryFormatterSerialization .NET 5에서 도입되었습니다. .NET 7에서는 컴파일 및 호스트 런타임 동작을 모두 제어하도록 이 스위치의 동작이 변경되었습니다. 이 스위치의 의미는 다음 표에 설명된 대로 프로젝트 형식에 따라 다릅니다.

프로젝트 형식 속성이 다음으로 설정됩니다. true 속성이 다음으로 설정됩니다. false 생략된 속성
라이브러리/공유 구성 요소1 영향을 받는 API는 경고로 인해 더 이상 사용되지 않습니다. 애플리케이션에 대해 "경고를 오류로 간주"를 사용하도록 설정하지 않거나 SYSLIB0011 경고 코드를 억제한 경우 컴파일이 성공합니다. 영향을 받는 API는 오류로 인해 구식이며, 코드에서 해당 API로의 호출이 컴파일 시간에 실패하지 않으려면 오류를 억제해야 합니다. "false와 동일하다."
Blazor 및 MAUI 앱2 런타임 시 BinaryFormatter에 대한 호출이 실패합니다. 런타임 시 BinaryFormatter에 대한 호출이 실패합니다. 런타임 시 BinaryFormatter에 대한 호출이 실패합니다.
ASP.NET 앱 영향을 받는 API는 경고로 인해 더 이상 사용되지 않습니다. 애플리케이션에 대해 "경고를 오류로 간주"를 사용하도록 설정하지 않거나 SYSLIB0011 경고 코드를 억제한 경우 컴파일이 성공합니다. 런타임은 호출이 코드에서 발생했는지 또는 사용하는 종속성에서 발생했는지에 관계없이 호출을 BinaryFormatter합니다. 영향을 받는 API는 오류로 인해 구식이며, 코드에서 해당 API로의 호출이 컴파일 시간에 실패하지 않으려면 오류를 억제해야 합니다. 런타임은 호출이 사용자 코드에서 시작되든 종속성을 사용할 때 시작되든 관계없이 호출을 BinaryFormatter합니다. "false와 동일하다."
데스크톱 앱 및 기타 모든 앱 유형 영향을 받는 API는 경고로 인해 더 이상 사용되지 않습니다. 애플리케이션에 대해 "경고를 오류로 간주"를 사용하도록 설정하지 않거나 SYSLIB0011 경고 코드를 억제한 경우 컴파일이 성공합니다. 런타임은 호출이 코드에서 발생했는지 또는 사용하는 종속성에서 발생했는지에 관계없이 호출을 BinaryFormatter합니다. 영향을 받는 API는 오류로 인해 구식이며, 코드에서 해당 API로의 호출이 컴파일 시간에 실패하지 않으려면 오류를 억제해야 합니다. 런타임은 호출이 사용자 코드에서 시작되든 종속성을 사용할 때 시작되든 관계없이 호출을 BinaryFormatter합니다. 영향을 받는 API는 오류로 인해 구식이며, 코드에서 해당 API로의 호출이 컴파일 시간에 실패하지 않으려면 오류를 억제해야 합니다. 런타임은 호출이 코드에서 발생했는지 또는 사용하는 종속성에서 발생했는지에 관계없이 호출을 BinaryFormatter합니다.

1런타임 정책은 앱 호스트에 의해 제어됩니다. BinaryFormatter 호출은 라이브러리의 프로젝트 파일 내에서 <EnableUnsafeBinaryFormatterSerialization>true로 설정되어 있더라도 런타임 시 실패할 수 있습니다. 라이브러리는 앱 호스트의 런타임 정책을 재정의할 수 없습니다.

2Blazor 및 MAUI 런타임에서는 BinaryFormatter 호출을 금지합니다. 설정한 값과 관계없이 실행 시 호출이 실패합니다. Blazor 또는 MAUI 애플리케이션 또는 Blazor 또는 MAUI 앱에서 사용할 라이브러리에서 이러한 API를 호출하지 마세요.

영향을 받는 API

참고하십시오