Xamarin Android:System.IO.Compression.ZipFile.ExtractToDirectory在发布模式下失败

sti*_*280 6 c# android xamarin

在调试模式下一切正常,但是当我们在发布时运行它时,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;
        }
Run Code Online (Sandbox Code Playgroud)

最后,这是我们得到的例外.

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 
Run Code Online (Sandbox Code Playgroud)

sti*_*280 5

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

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

这是更新的窗口。

在此处输入图片说明


Vic*_*aru 1

@mattewrobbinsdev 的建议正是如此。对于未来的读者,这是 Xamarin Studio 中的对话框:

对话