これは、既存の zip を更新するための私のコードです。呼び出し元は ZipFile を渡し、zipfile を閉じるために finally ブロックを持っています。
private static void AddFiles(ZipFile zipFile, string path, string filesEntryLocation, string pattern = @"*") {
zipFile.BeginUpdate();
string[] files = Directory.GetFiles(path, pattern);
foreach (string filename in files) {
zipFile.Add(filename, (filesEntryLocation + filename.Split(new[] { '\\' }).Last()).Replace('\\','/'));
}
zipFile.CommitUpdate();
}
ご覧のとおり、エントリを zip に追加し、エントリ名を zip フォルダ階層の特定の部分に設定しています。
「フレームワーク」Web パッケージに製品を挿入するためにこれを行っています。フレームワークは疎結合製品をサポートしています。
結果のzipは問題ありません。Windowsでナビゲートでき、抽出できます...しかし、MSDeployが登場し、新しいエントリがzipフォルダー階層に追加された場合、msdeployから開くことができなかったというエラーが表示されますzip-ただし、その特定の場合のみ、つまりzipが完全に破損していない場合は、msdeployが「新しい」フォルダーへの移動を開始する場所のみです。
ここで、変更された zip を抽出し、(7zip を使用して) 再圧縮し、msdeploy にそれに対して実行するように依頼すると、問題なく動作します。
SO - これは SharpZipLib ですか、それとも zip フォルダー階層に追加する際に何か問題がありますか?