这是我更新现有 zip 的代码,调用者传入 ZipFile 并有一个 finally 块来关闭 zipfile。
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 文件夹层次结构的特定部分。
我们这样做是为了将产品注入到“框架”网络包中——该框架支持松散耦合的产品。
结果 zip 很好,我可以在 Windows 中导航它,我可以提取它...但是 MSDeploy 出现了,并且在任何新条目导致添加 zip 文件夹层次结构时,我从 msdeploy 收到错误,说它无法打开zip - 但仅在特定的情况下,即 zip 没有完全损坏,它只是 msdeploy 开始导航完成“新”文件夹的地方。
现在,如果我提取更改的 zip,然后重新压缩它(使用 7zip),并要求 msdeploy 对此执行 - 没问题,它可以工作。
所以 - 这是 SharpZipLib,还是我在添加到 zip 文件夹层次结构时做错了什么?