다음을 통해 공유


SYSLIB0050: 포맷터 기반 serialization이 사용되지 않음

다음 API는 .NET 8부터 사용되지 않습니다. 코드에서 이러한 메서드를 호출하면 컴파일 시간에 SYSLIB0050 경고가 생성됩니다.

해결 방법

  • FormatterServices.GetUninitializedObject(Type)를 사용했다면 대신 RuntimeHelpers.GetUninitializedObject(Type)를 사용합니다.

    .NET Framework 및 최신 .NET에 대해 교차 컴파일하는 경우 다음 조각에 나타난 대로, #if 문을 사용하여 적절한 API를 선택적으로 호출할 수 있습니다.

    Type typeToInstantiate;
    #if NET5_0_OR_GREATER
    object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate);
    #else
    object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate);
    #endif
    
  • serialization 라이브러리를 작성하는 경우 레거시 serialization 인프라([Serializable]ISerializable)를 지원하는 serialization 라이브러리에 대해 적극 추천합니다. 최신 serialization 라이브러리에는 프라이빗 구현 세부 정보가 아닌 형식의 공용 API를 기반으로 하는 정책이 있어야 합니다. 직렬 변환기는 이러한 구현 세부 정보를 기반으로 하며 직렬화된 페이로드 내에 형식 이름을 포함하도록 권장하는 ISerializable 및 기타 메커니즘과 강력하게 연결하는 경우 BinaryFormatter 및 관련 형식 사용 시 Deserialization 위험에 설명된 문제가 발생할 수 있습니다.

    serialization 라이브러리가 레거시 serialization 인프라와 계속 호환되어야 하는 경우 레거시 serialization API 사용 중지를 쉽게 표시하지 않을 수 있습니다.

경고 표시 안 함

사용되지 않는 API를 사용해야 하는 경우, 코드 또는 프로젝트 파일에서 경고를 표시하지 않을 수 있습니다.

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 경고를 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

// Disable the warning.
#pragma warning disable SYSLIB0050

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0050

프로젝트에서 모든 SYSLIB0050 경고를 표시하지 않으려면 프로젝트 파일에 <NoWarn> 속성을 추가합니다.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
  </PropertyGroup>
</Project>

자세한 내용은 경고 표시 안 함을 참조하세요.

참고 항목