c# - Xamarin Android : System. IO.Compression.ZipFile.ExtractToDirectory 在 Release模式下失败

标签 c# android xamarin

在 Debug模式下一切正常,但是当我们在 Release模式下运行它时,ExtractToDirectory 调用失败。

这里是函数供引用。只是为了确保我们没有做任何奇怪的事情。

private bool UnzipFiles()
    {
        bool toReturn = true;
        try
        {
            UpdateStatus("Almost done...");
            string file = Path.Combine (DownloadFolder, "ZipFile.zip");
            if(System.IO.Directory.Exists(UnzippingDestinationFolder))
            {
                System.IO.Directory.Delete(UnzippingDestinationFolder, recursive:true);
            }

            System.IO.Compression.ZipFile.ExtractToDirectory(file, UnzippingDestinationFolder);
            UpdateStatus("Finished!");
            var files = System.IO.Directory.GetFiles(UnzippingDestinationFolder);

            int m = 3;

        }
        catch (Exception e)
        {
            toReturn = false;
        }

最后,这是我们得到的异常。

System.NullReferenceException: Object reference not set to an instance of an object
  at SharpCompress.Common.Zip.Headers.ZipFileEntry.DecodeString (System.Byte[] str) [0x00000] in <filename unknown>:0 
  at SharpCompress.Common.Zip.Headers.DirectoryEntryHeader.Read (System.IO.BinaryReader reader) [0x00000] in <filename unknown>:0 
  at SharpCompress.Common.Zip.ZipHeaderFactory.ReadHeader (UInt32 headerBytes, System.IO.BinaryReader reader) [0x00000] in <filename unknown>:0 
  at SharpCompress.Common.Zip.SeekableZipHeaderFactory+<ReadSeekableHeader>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0 
  at SharpCompress.Archive.Zip.ZipArchive+<LoadEntries>c__Iterator0.MoveNext () [0x00000] in <filename unknown>:0 
  at SharpCompress.LazyReadOnlyCollection`1+LazyLoader[SharpCompress.Archive.Zip.ZipArchiveEntry].MoveNext () [0x00000] in <filename unknown>:0 
  at System.IO.Compression.ZipArchive.CreateZip (System.IO.Stream stream, ZipArchiveMode mode) [0x00000] in <filename unknown>:0 
  at System.IO.Compression.ZipArchive..ctor (System.IO.Stream stream, ZipArchiveMode mode, Boolean leaveOpen, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
  at System.IO.Compression.ZipFile.Open (System.String archiveFileName, ZipArchiveMode mode, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
  at System.IO.Compression.ZipFile.ExtractToDirectory (System.String sourceArchiveFileName, System.String destinationDirectoryName, System.Text.Encoding entryNameEncoding) [0x00000] in <filename unknown>:0 
  at System.IO.Compression.ZipFile.ExtractToDirectory (System.String sourceArchiveFileName, System.String destinationDirectoryName) [0x00000] in <filename unknown>:0 
  at NewBaron.Screens.DownloadContentScreen.UnzipFiles () [0x00000] in <filename unknown>:0 

最佳答案

对 Victor 的解决方案稍作改动。不链接 SDK 会生成一个 53MB 的 apk。对于 Play 商店的 apk 大小限制来说太大了。

我将链接行为设置为仅链接 SDK 程序集,它使 apk 大小降至 29MB

这是更新后的窗口。

enter image description here

关于c# - Xamarin Android : System. IO.Compression.ZipFile.ExtractToDirectory 在 Release模式下失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31419111/

相关文章:

c# - 禁用控制+ C关闭程序

使用非测试人员 Facebook 帐户的 Android Facebook 登录错误

java - 循环嵌套的 ArrayList 以使用 gson 显示来自 JSON 的值

c# - 我如何通知容器对象一个属性已经从被改变的对象中改变了?

visual-studio-2013 - 没有安装的预配配置文件与使用 Visual Studio 在 Xamarin 中安装的 iOS 代码签名 key 匹配

c# - 寻找序列化方法或常量的解决方法

c# - 程序迷宫移除旧碰撞器

c# - 如何使用 xamarin C# 从 iOS 上的广告中读取 kCBAdvDataManufacturerData 的值

android - 创建资源 ID 的整数数组

visual-studio - 如何在物理 iOS 设备上调试 Xamarin.iOS 应用