.NET Framework 4.6.1 を対象とするアプリ以降、 ZipArchiveEntry.FullName プロパティで使用されるパス区切り記号が、以前のバージョンの .NET Framework で使用されていた円記号 ("\") からスラッシュ ("/") に変更されました。 System.IO.Compression.ZipArchiveEntry オブジェクトは、 ZipFile.CreateFromDirectory メソッドのいずれかのオーバーロードを呼び出すことによって作成されます。
インパクト
この変更によって、.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>
こちらも参照ください
.NET