Kockázatcsökkentés: ZipArchiveEntry.FullName elérésiút-elválasztó

A .NET-keretrendszer 4.6.1-et megcélzó alkalmazásoktól kezdve a tulajdonságban ZipArchiveEntry.FullName használt elérési útelválasztó a .NET-keretrendszer korábbi verzióiban használt fordított perjelről ("\") egy perjelre ("/") módosult. System.IO.Compression.ZipArchiveEntry az objektumok a metódus egyik túlterhelésének ZipFile.CreateFromDirectory meghívásával jönnek létre.

Hatás

A változás a .NET-implementációt a .ZIP fájlformátum specifikációjának 4.4.17.1 szakaszával összhangban hozza létre, és lehetővé teszi .ZIP archívumok tömörítését a nem Windows rendszerű rendszereken.

Az alkalmazás által létrehozott zip-fájlok kibontása, amely a .NET-keretrendszer egy korábbi verzióját célozza nem Windows rendszerű operációs rendszereken, például MacOS-en, nem tudja megőrizni a címtárstruktúrát. MacOS rendszeren például létrehoz egy fájlkészletet, amelynek fájlneve összefűzi a könyvtár elérési útját, a fordított perjel ("\") karaktereket és a fájlnevet. Ennek eredményeképpen a tömörített fájlok könyvtárszerkezete nem marad meg.

Ennek a változásnak a .NET-keretrendszer System.IO névterében az API-k által a Windows operációs rendszeren tömörített .ZIP fájlokra gyakorolt hatása minimális, mivel ezek az API-k zökkenőmentesen kezelhetik a perjelet ("/") vagy a fordított perjelet ("\") elérési útelválasztó karakterként.

Enyhítés

Ha ez a viselkedés nem kívánatos, kikapcsolhatja, ha hozzáad egy konfigurációs beállítást az <alkalmazáskonfigurációs fájl futtatókörnyezeti> szakaszához. Az alábbiakban a <runtime> szakasz és az opt-out kapcsoló is látható.

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

Emellett azok az alkalmazások, amelyek a .NET-keretrendszer korábbi verzióit célozzák, de a .NET-keretrendszer 4.6.1-es és újabb verzióiban futnak, az alkalmazáskonfigurációs fájl futtatókörnyezeti< szakaszához hozzáadva> engedélyezhetik ezt a viselkedést. Az alábbiakban a <runtime> szakasz és az opt-in kapcsoló is látható.

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

Lásd még