Dela via


Åtgärd: ZipArchiveEntry.FullName Sökvägsavgränsare

Från och med appar som riktar sig mot .NET Framework 4.6.1 har sökvägsavgränsaren som används i ZipArchiveEntry.FullName egenskapen ändrats från omvänt snedstreck ("\") som användes i tidigare versioner av .NET Framework till ett snedstreck ("/"). System.IO.Compression.ZipArchiveEntry objekt skapas genom att anropa en av överlagringarna av ZipFile.CreateFromDirectory metoden.

Påverkan

Ändringen bringar .NET-implementeringen i överensstämmelse med avsnitt 4.4.17.1 i .ZIP-filformatspecifikationen och gör att .ZIP arkiv kan dekomprimeras på icke-Windows-system.

Det går inte att bevara katalogstrukturen genom att expandera en zip-fil som skapats av en app som riktar sig mot en tidigare version av .NET Framework på andra operativsystem än Windows, till exempel MacOS. I MacOS skapas till exempel en uppsättning filer vars filnamn sammanfogar katalogsökvägen, eventuella omvänt snedstreck ("\") och filnamnet. Därför bevaras inte katalogstrukturen för dekomprimerade filer.

Effekten av den här ändringen på .ZIP filer som komprimeras på Windows-operativsystemet av API:er i .NET Framework-namnområdet System.IO bör vara minimala, eftersom dessa API:er sömlöst kan hantera antingen ett snedstreck ("/") eller ett omvänt snedstreck ("\") som sökvägsavgränsartecken.

Åtgärd

Om det här beteendet är oönskat kan du avregistrera dig genom att lägga till en konfigurationsinställning i körningsavsnittet <> i programkonfigurationsfilen. Följande visar både <runtime> avsnittet och avaktiveringsväxeln.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=true" />  
</runtime>  

Dessutom kan appar som riktar sig mot tidigare versioner av .NET Framework men körs på .NET Framework 4.6.1 och senare versioner välja det här beteendet genom att lägga till <en konfigurationsinställning i körningsavsnittet> i programkonfigurationsfilen. Följande visar både <runtime> avsnittet och opt-in-växeln.

<runtime>  
   <AppContextSwitchOverrides value="Switch.System.IO.Compression.ZipFile.UseBackslash=false" />  
</runtime>  

Se även