底层压缩程序无法正确加载

3
我无法在我的UWP应用程序中使用System.IO.Compression库,我需要用它来压缩一个太大而无法放入隔离存储的字符串。我怀疑这是在我更新所有Nuget包时开始的。我一直收到以下错误,代码如下所示,
编辑:这似乎只发生在DEBUG模式下。当我在RELEASE模式下编译我的应用程序并部署到设备或本地机器上时,两者都可以工作。但是当我尝试进行调试时,它会崩溃(崩溃发生在稍后尝试使用包含空内容的解压缩字符串的代码中 - 在using语句中失败了 - 并且我的应用程序中的其余代码已被执行)
消息
底层压缩例程无法正确加载。
堆栈跟踪

在System.IO.Compression.Deflater.DeflateInit(CompressionLevel compressionLevel, Int32 windowBits, Int32 memLevel, CompressionStrategy strategy)处初始化压缩级别、窗口位数、内存级别和压缩策略;在System.IO.Compression.Deflater..ctor(CompressionLevel compressionLevel, Int32 windowBits)处构造压缩级别和窗口位数;在System.IO.Compression.DeflateStream.InitializeDeflater(Stream stream, Boolean leaveOpen, Int32 windowBits, CompressionLevel compressionLevel)处初始化压缩流的压缩器;在System.IO.Compression.DeflateStream..ctor(Stream stream, CompressionMode mode, Boolean leaveOpen, Int32 windowBits)处构造压缩流的压缩器,这些是代码中出现的方法。

我认为这可能与此有关

解压缩时出现“基础压缩例程无法正确加载”的错误

我不知道该怎么办。是否有一种不依赖于System.IO的替代Zip库,我可以在UWP中使用?- 我尝试安装DotNetZip但无法安装。

代码

public static class Extensions
{
    /// <summary>
    /// Compresses a string and returns a deflate compressed, Base64 encoded string.
    /// </summary>
    /// <param name="uncompressedString">String to compress</param>
    public static string Compress(this string uncompressedString)
    {
        var compressedStream = new MemoryStream();
        var uncompressedStream = new MemoryStream(Encoding.UTF8.GetBytes(uncompressedString));

        using (var compressorStream = new DeflateStream(compressedStream, CompressionMode.Compress, true))
        {
            uncompressedStream.CopyTo(compressorStream);
        }

        return Convert.ToBase64String(compressedStream.ToArray());
    }

    /// <summary>
    /// Decompresses a deflate compressed, Base64 encoded string and returns an uncompressed string.
    /// </summary>
    /// <param name="compressedString">String to decompress.</param>
    public static string Decompress(this string compressedString)
    {
        var decompressedStream = new MemoryStream();
        var compressedStream = new MemoryStream(Convert.FromBase64String(compressedString));

        using (var decompressorStream = new DeflateStream(compressedStream, CompressionMode.Decompress))
        {
            decompressorStream.CopyTo(decompressedStream);
        }

        return Encoding.UTF8.GetString(decompressedStream.ToArray());
    }
}

1
我已经测试了你的代码。但是我无法重现你的问题,而且我的项目中Microsoft.NETCore.UniversalWindowsPlatfom的版本是5.1.0。你可以提供更多关于你引用的nuget包版本的细节,就像你在你的案例中提到的那样。 - Nico Zhu
1个回答

0
最可能是 clrcompression.dll 文件损坏了。请清理并重新构建解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接