ZIP 파일 사양은 중첩된 파일 레코드의 중앙 디렉터리 헤더에 있는 범용 비트 플래그의 비트 1과 2를 사용하여 중첩된 파일의 압축 수준을 나타내야 한다고 정의합니다.
.NET Framework는 ZipPackage API를 뒷받침하는 ZIP 파일을 생성할 때 이러한 비트를 설정합니다. .NET Framework 코드를 .NET으로 마이그레이션하는 동안 이 기능이 손실되었으며 .NET에서는 ZIP 파일 내에서 새 파일 레코드가 생성될 때 비트 1 및 2가 항상 0으로 설정되었습니다. 이 호환성이 손상되는 변경은 해당 기능을 복원합니다. 그러나 CompressionOption를 호출할 때 ZipArchive.CreateEntry을 지정하는 기존 .NET 클라이언트에서는 범용 비트 플래그 값이 변경되는 것을 볼 수 있습니다.
이전 동작
이전에 .NET은 로드되고 새 항목이 추가될 때 이미 ZipArchiveEntry에 있는 모든 ZipArchive에 대한 범용 비트를 보존했습니다. 그러나 ZipArchive.CreateEntry(String, CompressionLevel)를 호출하면 0이 아닌 CompressionLevel이 사용되었음에도 항상 비트 1 및 2가 기본값 CompressionLevel.Optimal으로 남게 되었습니다.
이 동작으로 인해 다운스트림 효과가 있었습니다. Package.CreatePart(Uri, String, CompressionOption)을 사용하여 CompressionOption를 호출하면 비트 1과 2가 설정되지 않은 상태로 유지되었습니다(따라서 CompressionOption은 항상 ZIP 파일에 CompressionOption.Normal로 유지되었습니다).
새 동작
.NET 9부터 CompressionLevel 매개 변수는 다음 표에 표시된 대로 범용 비트 플래그에 매핑됩니다.
CompressionLevel |
비트 1 | 비트 2 |
|---|---|---|
NoCompression |
0 | 0 |
Optimal |
0 | 0 |
SmallestSize |
1 | 0 |
Fastest |
1 | 1 |
ZipArchive.CreateEntry(String, CompressionLevel)를 호출하고 CompressionLevel.NoCompression을 지정하면 중첩된 파일 레코드의 압축 메서드는 기본값인 Stored가 아닌 Deflate로 설정됩니다.
ZipArchiveEntry에 이미 존재하는 ZipArchive 레코드의 범용 비트는 새 ZipArchiveEntry가 추가되는 경우에도 계속 유지됩니다.
CompressionOption의 Package.CreatePart(Uri, String, CompressionOption) 열거형 값은 다음 표에 표시된 대로 CompressionLevel에 매핑됩니다(결과적으로 해당 비트가 설정됨).
CompressionOption |
CompressionLevel |
|---|---|
NotCompressed |
NoCompression |
Normal |
Optimal |
Maximum |
SmallestSize(.NET Framework)Optimal(.NET) |
Fast |
Fastest |
SuperFast |
Fastest |
도입된 버전
.NET 9 미리 보기 5
호환성이 손상되는 변경의 형식
이 변경 사항은 동작 변경입니다.
변경 이유
이 호환성이 손상되는 변경은 포팅 시점에 .NET에서 생략된 기존 .NET Framework 동작을 복원하기 위해 도입되었습니다. 또한 이 변경으로 인해 다운스트림 클라이언트(예: System.IO.Packaging)가 이러한 비트 값을 제어할 수 있게 되었습니다.
권장 작업
ZipArchiveEntry에 추가된 새 ZipArchive 레코드의 범용 비트 플래그가 0인지 확인하려면 CompressionLevel를 호출할 때 CompressionLevel.Optimal을 CompressionLevel.NoCompression 또는 ZipArchive.CreateEntry(String, CompressionLevel)으로 지정하세요.
Package.CreatePart(Uri, String, CompressionOption)를 사용하여 OPC 패키지에 파트를 추가하는 경우 CompressionOption을 CompressionOption.NotCompressed 또는 CompressionOption.Normal로 지정하세요.
영향을 받는 API
.NET