使用MSBuild的UnZip任务无法解压缩包含文件夹的zip文件

时间:2019-03-21 01:34:18

标签: visual-studio msbuild

我尝试使用文件夹解压缩zip文件。从“根”目录取消文件存档没有问题,但是一旦该过程进入文件夹,我就会收到错误MSB3936。

使用 MSBuild任务是否有解决该问题的方法?

内联MSBuild任务(使用.Net System.IO.Compression.ZipFile.ExtractToDirectory)与带有子文件夹的zip一起正常工作。因此,嵌入式MSBuild任务不起作用(甚至包括VS 2019(16))更加奇怪。

1 个答案:

答案 0 :(得分:1)

  

使用MSBuild任务是否可以解决该问题?

目前,MSBuild任务可能无法解决问题。这是与解压缩任务有关的一个问题#3884(或可能是错误)。您可以从this link中找到该帖子。包括我在内,有类似问题的几名成员也投了赞成票。希望即将发布的MSBuild 16.1将解决此问题。尽管根据里程碑,这可能需要一些时间。

  

解决方法:您可以在解压缩任务中添加“ ContinueOnEerror”。

  Target Name="UnzipArchive" BeforeTargets="Build">
    <Unzip ContinueOnError="true"
        SourceFiles="C:\Users\lancel\Desktop\AFolder.zip"
        DestinationFolder="$(OutputPath)\unzipped"
        OverwriteReadOnlyFiles="true"
        />
  </Target>

对于“ ContinueOnError”,如果在MSBuild Task上进行了设置,则即使任务执行失败,构建过程也会继续。

好消息是,经过我的测试,尽管错误消息如下:

Failed to open unzip file "AFolder/c/" to "xxx\bin\Debug\unzipped\AFolder\c\".  Could not find a part of the path 'C:\xxx\bin\Debug\unzipped\AFolder\c\

实际上,任务运行成功,这意味着解压缩任务执行良好。

但是由于某些未知的原因,它将抛出错误,从而干扰整个构建过程。

因此添加'ContinueOnError = true',此后,构建将成功,并且错误消息将变为警告消息。此外,该文件夹将很好地解压缩到DestinationFolder。

另外:删除DestinationFolder中所有现有的未压缩文件夹。再次构建项目,检查已压缩文件夹和已解压缩文件夹的内容,在我这边,它们是相同的。