Entschärfung: Pfadtrennzeichen für ZipArchiveEntry.FullName

Bei Apps für .NET Framework 4.6.1 und höhere Versionen wurde das in der Eigenschaft ZipArchiveEntry.FullName verwendete Pfadtrennzeichen von einem umgekehrten Schrägstrich („\“), der in früheren Versionen von .NET Framework verwendet wurde, in einen Schrägstrich („/“) geändert. System.IO.Compression.ZipArchiveEntry-Objekte werden durch Aufrufen einer der Überladungen der ZipFile.CreateFromDirectory-Methode erstellt.

Auswirkungen

Die Änderung bringt die .NET-Implementierung in Einklang mit Abschnitt 4.4.17.1 der ZIP-Dateiformatspezifikation und ermöglicht es, dass ZIP-Archive auf Nicht-Windows-Systemen entpackt werden.

Beim Dekomprimieren einer ZIP-Datei, die für eine frühere Version des .NET Framework unter einem anderen als dem Windows-Betriebssystem – wie etwa macOS – erstellt wurde, bleibt die Verzeichnisstruktur nicht erhalten. Beispielsweise werden unter macOS mehrere Dateien erstellt, deren Namen eine Verkettung aus dem Verzeichnispfad, allen vorhandenen umgekehrten Schrägstrichen („\“) und dem Dateinamen darstellen. Im Ergebnis wird die Verzeichnisstruktur der dekomprimierten Dateien nicht beibehalten.

Die Auswirkungen dieser Änderungen auf ZIP-Dateien, die unter dem Windows-Betriebssystem durch die APIs im .NET Framework System.IO-Namespace dekomprimiert werden, sollten minimal sein, da diese APIs sowohl den Schrägstrich („/“) als auch den umgekehrten Schrägstrich („\“) als Pfadtrennzeichen verarbeiten können.

Minderung

Wenn dieses Verhalten nicht erwünscht ist, können Sie sich dagegen entscheiden, indem Sie dem Abschnitt <runtime> Ihrer Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen. Im Folgenden sind sowohl der Abschnitt <runtime> als auch der Schalter zur Ablehnung dargestellt.

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

Dieses Verhalten kann auch für Apps aktiviert werden, die für frühere .NET Framework-Versionen entwickelt wurden, aber in .NET Framework 4.6.1 und höher ausgeführt werden. Dazu müssen Sie dem Abschnitt <runtime> der Anwendungskonfigurationsdatei eine Konfigurationseinstellung hinzufügen. Im Folgenden sind sowohl der Abschnitt <runtime> als auch der Schalter zur Annahme dargestellt.

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

Siehe auch