Mitigazione: Separatore di percorsi ZipArchiveEntry.FullName

A partire dalle app destinate a .NET Framework 4.6.1, il separatore di percorso usato nella proprietà ZipArchiveEntry.FullName è cambiato dalla barra rovesciata ("\") usata nelle versioni precedenti di .NET Framework a una barra ("/"). Gli oggetti System.IO.Compression.ZipArchiveEntry vengono creati chiamando uno degli overload del metodo ZipFile.CreateFromDirectory.

Impatto

Questa modifica garantisce la conformità dell'implementazione .NET alla sezione 4.4.17.1 della specifica relativa al formato di file ZIP e consente agli archivi con estensione ZIP di essere decompressi anche in sistemi non Windows.

La decompressione di un file ZIP creato da un'applicazione che ha come destinazione una versione precedente di .NET Framework nei sistemi operativi non Windows, ad esempio MacOS, non riesce a mantenere la struttura della directory. Ad esempio, su MacOS viene creato un set di file il cui nome concatena il percorso della directory, qualsiasi barra rovesciata ("\") e il nome file. Di conseguenza, la struttura di directory dei file decompressi non viene mantenuta.

L'impatto di questa modifica sui file con estensione zip che vengono decompressi nel sistema operativo Windows dalle API nello spazio dei nomi .NET Framework System.IO dovrebbe essere minimo, poiché queste API possono gestire facilmente una barra ("/") o una barra rovesciata ("\") come carattere separatore di percorso.

Mitigazione

Se questo comportamento è inaccettabile, è possibile scegliere di aggiungere un'impostazione di configurazione per la sezione <runtime> del file di configurazione dell'applicazione. Di seguito viene illustrato sia la sezione <runtime> sia il commutatore di rifiuto.

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

Inoltre, le app destinate a versioni precedenti di .NET Framework ma in esecuzione su NET Framework 4.6.1 e versioni successive possono acconsentire esplicitamente a questo comportamento aggiungendo un'impostazione di configurazione alla sezione <runtime>> del file di configurazione dell'applicazione. Di seguito viene illustrato sia la sezione <runtime> sia il commutatore di consenso.

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

Vedi anche