Środki zaradcze: ZipArchiveEntry.FullName, separator ścieżki

Począwszy od aplikacji przeznaczonych dla programu .NET Framework 4.6.1, separator ścieżki używany we ZipArchiveEntry.FullName właściwości został zmieniony z ukośnika odwrotnego ("\") używanego w poprzednich wersjach programu .NET Framework do ukośnika do przodu ("/"). System.IO.Compression.ZipArchiveEntry obiekty są tworzone przez wywołanie jednego z przeciążeń ZipFile.CreateFromDirectory metody .

Wpływ

Zmiana powoduje, że implementacja platformy .NET jest zgodna z sekcją 4.4.17.1 specyfikacji formatu plików .ZIP i umożliwia dekompresowane archiwa .ZIP w systemach innych niż Windows.

Dekompresowanie pliku zip utworzonego przez aplikację, która jest przeznaczona dla poprzedniej wersji programu .NET Framework w systemach operacyjnych innych niż Windows, takich jak MacOS, nie może zachować struktury katalogów. Na przykład w systemie MacOS tworzy zestaw plików, których nazwa pliku łączy ścieżkę katalogu, wszelkie znaki ukośnika odwrotnego ("\") i nazwę pliku. W związku z tym struktura katalogów dekompresowanych plików nie jest zachowywana.

Wpływ tej zmiany na pliki .ZIP, które są dekompresowane w systemie operacyjnym Windows przez interfejsy API w przestrzeni nazw programu .NET Framework System.IO , powinny być minimalne, ponieważ te interfejsy API mogą bezproblemowo obsługiwać ukośnik ("/") lub ukośnik odwrotny ("\") jako znak separatora ścieżki.

Czynności zapobiegawcze

Jeśli to zachowanie jest niepożądane, możesz zrezygnować, dodając ustawienie konfiguracji do <sekcji środowiska uruchomieniowego> pliku konfiguracji aplikacji. Poniżej przedstawiono zarówno sekcję, jak <runtime> i przełącznik rezygnacji.

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

Ponadto aplikacje przeznaczone dla poprzednich wersji programu .NET Framework, ale są uruchomione w programie .NET Framework 4.6.1 i nowszych wersjach, mogą zdecydować się na to zachowanie, dodając ustawienie konfiguracji do <sekcji środowiska uruchomieniowego> pliku konfiguracji aplikacji. Poniżej przedstawiono zarówno sekcję, <runtime> jak i przełącznik zgody.

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

Zobacz też