다음을 통해 공유


PublishedTrimmed 프로젝트가 반사 기반 직렬화에 실패함

이제 PublishTrimmed MSBuild 속성을 사용하도록 설정하는 프로젝트는 이제 System.Text.Json 리플렉션 기반 기본값을 자동으로 해제합니다. 즉, PublishTrimmed(을)를 true(으)로 설정하면 프로젝트 구성에 달리 지정하지 않는 한 JsonSerializerIsReflectionEnabledByDefault MSBuild 속성이 false(으)로 자동으로 설정됩니다.

이전 동작

이 변경 전에 PublishTrimmed 속성을 사용하는 프로젝트, 즉 <PublishTrimmed>true</PublishTrimmed>(이)가트리밍된 애플리케이션을 게시했습니다. 그러나 리플렉션 기반 기본 serialization 동작이 반드시 사용하지 않도록 설정되지는 않았습니다. 잘려진 코드에 따라 다음 코드는 serialization에 성공하거나 성공하지 못하거나 올바른 serialization 데이터를 출력할 수도 있고 그렇지 않을 수도 있습니다.

JsonSerializer.Serialize(new { Value = 42 });

새 동작

.NET 8부터 PublishTrimmed 속성을 사용하도록 설정한 프로젝트는 직렬화에 완전히 실패합니다. 코드 JsonSerializer.Serialize(new { Value = 42 });(은)는 다음 예외를 throw합니다.

System.InvalidOperationException: 리플렉션 기반 serialization이 이 애플리케이션에 대해 비활성화되었습니다.

도입된 버전

.NET 8 미리 보기 7

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

이렇게 변경하면 잘려진 애플리케이션에서 적절한 기본값을 사용할 수 있습니다. 또한 사용자가 원본 생성기를 사용하고 안전하지 않은 리플렉션 기반 구성 요소에 대한 우발적인 종속성을 방지하는 트리밍된 애플리케이션—에 적합한 모범 사례를 채택하는 방법을 안내합니다.

serialization이 처리되도록 하려면 원본 생성기를 사용하도록 트리밍된 애플리케이션을 마이그레이션하는 것이 좋습니다.

그러나 리플렉션을 사용해야 하는 경우 프로젝트 파일에서 JsonSerializerIsReflectionEnabledByDefault 속성을 명시적으로 사용하도록 설정하여 원래 동작으로 되돌릴 수 있습니다.

<PropertyGroup>
  <PublishTrimmed>true</PublishTrimmed>
  <JsonSerializerIsReflectionEnabledByDefault>true</JsonSerializerIsReflectionEnabledByDefault>
</PropertyGroup>

영향을 받는 API

N/A