Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ZIP dosyası belirtimi, iç içe dosya kaydının merkezi dizin üst bilgisindeki genel amaçlı bit bayrağının 1 . ve 2. bitlerinin iç içe dosyanın sıkıştırma düzeyini belirtmek için kullanılması gerektiğini tanımlar.
.NET Framework, API'yi oluşturan ZipPackage ZIP dosyalarını oluştururken bu bitleri ayarlar. .NET Framework kodunun .NET'e geçirilmesi sırasında bu işlev kayboldu ve .NET'te, ZIP dosyasında yeni dosya kayıtları oluşturulduğunda bit 1 ve 2 her zaman olarak 0 ayarlandı. Bu hataya neden olan değişiklik bu özelliği geri yükler. Ancak, ne zaman çağrılacağını CompressionOption belirten ZipArchive.CreateEntry mevcut .NET istemcileri genel amaçlı bit bayrağı değerlerinin değiştiğini görür.
Önceki davranış
Daha önce .NET, yüklendiğinde ve yeni girdiler eklendiğinde zaten içindeki ZipArchiveEntry her ZipArchive için genel amaçlı bitleri korumuştu. Ancak çağrı ZipArchive.CreateEntry(String, CompressionLevel) her zaman 1 & 2 bitlerinin dışında bir 0CompressionLevel değer kullanılsa bile varsayılan değerinde bırakılmasına CompressionLevel.Optimalneden oldu.
Bu davranışın aşağı akış etkisi vardı: herhangi bir Package.CreatePart(Uri, String, CompressionOption) çağrı ile çağrılması CompressionOption bit 1 & amp2'nin ayarsız bırakılmasına neden oldu (ve bu nedenle CompressionOption zip dosyasında her zaman olarak CompressionOption.Normalkalıcıydı).
Yeni davranış
.NET 9'dan başlayarak, CompressionLevel parametresi aşağıdaki tabloda gösterildiği gibi genel amaçlı bit bayraklarıyla eşlenir.
CompressionLevel |
Bit 1 | Bit 2 |
|---|---|---|
NoCompression |
0 | 0 |
Optimal |
0 | 0 |
SmallestSize |
1 | 0 |
Fastest |
1 | 1 |
öğesini çağırır ZipArchive.CreateEntry(String, CompressionLevel) ve belirtirsenizCompressionLevel.NoCompression, iç içe dosya kaydının sıkıştırma yöntemi (varsayılan değeri Storedyerine) olarak ayarlanır Deflate .
Içinde zaten var olan ZipArchiveEntry kayıtların genel amaçlı bitleriZipArchive, yeni ZipArchiveEntry bir eklendiğinde yine de korunur.
içindeki CompressionOption numaralandırma değerleri Package.CreatePart(Uri, String, CompressionOption) , aşağıdaki tabloda gösterildiği gibi ile eşlenir CompressionLevel (ve buna karşılık gelen bitlerin ayarlanmasıyla sonuçlanır).
CompressionOption |
CompressionLevel |
|---|---|
NotCompressed |
NoCompression |
Normal |
Optimal |
Maximum |
SmallestSize (.NET Framework)Optimal (.NET) |
Fast |
Fastest |
SuperFast |
Fastest |
Sürüm kullanıma sunulmuştur
.NET 9 Önizleme 5
Hataya neden olan değişikliğin türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Bu hataya neden olan değişiklik, taşıma noktasında .NET'ten atlanan mevcut .NET Framework davranışını geri yüklemek için kullanıma sunulmuştur. Bu değişiklik ayrıca aşağı akış istemcilerine (örneğin System.IO.Packaging) bu bitlerin değeri üzerinde denetim sağlar.
Önerilen eylem
öğesine eklenen yeni ZipArchiveEntry kayıtların ZipArchive genel amaçlı bit bayraklarına 0sahip olduğundan emin olmak istiyorsanız, veya CompressionLevel çağrısı CompressionLevel.Optimalyaptığınızda değerini CompressionLevel.NoCompressionZipArchive.CreateEntry(String, CompressionLevel) belirtin.
OPC paketine parça eklemek için kullanıyorsanız Package.CreatePart(Uri, String, CompressionOption) veya CompressionOptiondeğerini belirtin CompressionOption.NotCompressedCompressionOption.Normal.