Beperking: ZipArchiveEntry.FullName-padscheidingsteken
Vanaf apps die gericht zijn op .NET Framework 4.6.1, is het padscheidingsteken dat in de ZipArchiveEntry.FullName eigenschap wordt gebruikt, gewijzigd van de backslash ("\") die in eerdere versies van .NET Framework is gebruikt voor een slash ("/"). System.IO.Compression.ZipArchiveEntry objecten worden gemaakt door een van de overbelastingen van de ZipFile.CreateFromDirectory methode aan te roepen.
Impact
De wijziging brengt de .NET-implementatie in overeenstemming met sectie 4.4.17.1 van de specificatie van de .ZIP bestandsindeling en stelt .ZIP archieven in staat om te worden gedecomprimeerd op niet-Windows-systemen.
Het decomprimeren van een zip-bestand dat is gemaakt door een app die is gericht op een eerdere versie van .NET Framework op niet-Windows-besturingssystemen, zoals MacOS, kan de mapstructuur niet behouden. In MacOS wordt bijvoorbeeld een set bestanden gemaakt waarvan de bestandsnaam het pad van de map, eventuele backslashtekens ("\") en de bestandsnaam samenvoegt. Hierdoor blijft de mapstructuur van gedecomprimeerde bestanden niet behouden.
De impact van deze wijziging op .ZIP bestanden die zijn gedecomprimeerd op het Windows-besturingssysteem door API's in .NET Framework-naamruimte System.IO , moet minimaal zijn, omdat deze API's naadloos een slash ("/") of een backslash ("\") kunnen verwerken als het padscheidingsteken.
Oplossing
Als dit gedrag ongewenst is, kunt u zich afmelden door een configuratie-instelling toe te voegen aan de <runtimesectie> van uw toepassingsconfiguratiebestand. Hieronder ziet u zowel de <runtime>
sectie als de opt-out-switch.
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />
</runtime>
Bovendien kunnen apps die gericht zijn op eerdere versies van .NET Framework, maar worden uitgevoerd op .NET Framework 4.6.1 en latere versies, zich aanmelden voor dit gedrag door een configuratie-instelling toe te voegen aan de <runtimesectie> van het toepassingsconfiguratiebestand. Hieronder ziet u zowel de <runtime>
sectie als de opt-in-switch.
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />
</runtime>