軽減策:ZipArchiveEntry.FullName パスの区切り文字

.NET Framework 4.6.1 を対象とするアプリから、ZipArchiveEntry.FullName プロパティで使用されるパスの区切り文字は、以前のバージョンの .NET Framework で使用されていたバックスラッシュ ("\") からスラッシュ ("/") に変更されています。 ZipFile.CreateFromDirectory メソッドのオーバーロードのいずれかを呼び出すことで、System.IO.Compression.ZipArchiveEntry オブジェクトが作成されます。

影響

この変更によって、.NET の実装が .ZIP ファイル形式の仕様のセクション 4.4.17.1 に準拠するようになったほか、Windows 以外のシステムで ZIP アーカイブを圧縮解除できるようになりました。

MacOS などの Windows 以外のオペレーティング システムで以前のバージョンの .NET Framework を対象とするアプリで作成された zip ファイルを圧縮解除すると、ディレクトリ構造を保持できません。 たとえば、MacOS で、ディレクトリ パス、バックスラッシュ ("\")、ファイル名が連結された名前を持つ一連のファイルを作成するとします。 その場合、圧縮解除されたファイルのディレクトリ構造は保持されません。

.NET Framework System.IO 名前空間の API によって、Windows オペレーティング システムで展開される .zip ファイルでは、この変更の影響は最小限になるはずです。これらの API では、スラッシュ ("/") またはバックスラッシュ ("\") をパスの区切り文字としてシームレスに処理できるためです。

対応策

この動作が望ましくない場合は、アプリケーション構成ファイルの <runtime> セクションに構成設定を追加して、無効にすることができます。 以下は、<runtime> セクションと無効への切り替えの両方を示しています。

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

また、以前のバージョンの .NET Framework を対象とするものの、.NET Framework 4.6.1 以降のバージョンで実行されているアプリでは、アプリケーション構成ファイルの <runtime> セクションに構成設定を追加して、この動作を有効にすることができます。 以下は、<runtime> セクションと有効への切り替えの両方を示しています。

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

関連項目