Entschärfung: Pfadtrennzeichen für ZipArchiveEntry.FullName

Von Apps für die Zielplattform .NET Framework 4.6.1 an wurde das in der Eigenschaft <xref:System.IO.Compression.ZipArchiveEntry.FullName%2A?displayProperty=fullName> verwendete Pfadtrennzeichen vom umgekehrten Schrägstrich („\“), der in früheren Versionen von .NET Framework verwendet wurde, in einen einfachen Schrägstrich („/“) geändert. <xref:System.IO.Compression.ZipArchiveEntry?displayProperty=fullName>-Objekte werden durch Aufrufen einer der Überladungen der <xref:System.IO.Compression.ZipFile.CreateFromDirectory%2A?displayProperty=fullName>-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 der .NET Framework-Zielplattform unter einem anderen als dem Windows-Betriebssystem – wie etwa dem Macintosh – erstellt wurde, bleibt die Verzeichnisstruktur nicht erhalten. Beispielsweise wird auf dem Macintosh ein Satz Dateien erstellt, deren Dateinamen eine Verkettung aus dem Verzeichnispfad mit allen ggf. vorhandenen umgekehrten Schrägstrichzeichen („\“) 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 <xref:System.IO>-Namespace dekomprimiert werden, sollten minimal sein, da diese APIs sowohl den einfachen Schrägstrich („/“) als auch den umgekehrten Schrägstrich („\“) als Pfadtrennzeichen verarbeiten können.

Problemumgehung

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>  

Darüber hinaus können Apps mit früheren Versionen von .NET Framework als Zielplattform, die unter .NET Framework 4.6.1 und höheren Versionen ausgeführt werden, sich für die Verwendung dieses Verhaltens entscheiden, indem 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

Neuausrichtungsänderungen
Anwendungskompatibilität in 4.6.1