我尝试使用文件夹解压缩zip文件。从“根”目录取消文件存档没有问题,但是一旦该过程进入文件夹,我就会收到错误MSB3936。
使用 MSBuild任务是否有解决该问题的方法?
内联MSBuild任务(使用.Net System.IO.Compression.ZipFile.ExtractToDirectory)与带有子文件夹的zip一起正常工作。因此,嵌入式MSBuild任务不起作用(甚至包括VS 2019(16))更加奇怪。
答案 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中所有现有的未压缩文件夹。再次构建项目,检查已压缩文件夹和已解压缩文件夹的内容,在我这边,它们是相同的。