尝试使用以下代码在Win10移动版(UWP)上解压缩文件

using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Read))
{
  ZipArchiveEntry entry = archive.Entries.First();
  using (Stream reader = entry.Open())
  {


在entry.Open()上抛出以下错误。
“底层压缩例程无法正确加载。”

除了内在的例外

“无法加载DLL'clrcompression.dll':找不到指定的模块。(HRESULT的异常:0x8007007E)”

重要说明:


entry.Open()在Win10桌面上正常运行,但在具有相同项目(UWP)的Win10移动版上却无法正常运行
使用Win10移动版10.0.14393.576。 (Lumia 650)
该项目的UWP目标版本为10.0 BUILD 14393
对于桌面版和移动版使用相同的文件。
该文件是使用简单的方法在后端创建的


using (ZipArchive archive = new ZipArchive(stream, ZipArchiveMode.Create,true))


我正在使用Xamarin表单(我认为这不相关)


问题:
有人经历过同样的例外吗?根本原因是什么?
有哪些可用的解决方法? (我需要跨平台压缩文件)

更新:我根据要求创建了一个简单的测试项目(感谢您的研究)。

解压缩可在测试项目中使用,但它正在加载其他模块。
调试/模块窗口指出,引发异常的项目使用System.IO.Compression.dll 4.06.24705.1,工作项目使用1.00.24301.1。

我上载了两个project.lock.json文件以进行比较https://1drv.ms/f/s!AqROiejT4oI3lL1q1tu3iJcfA2tKyg

最佳答案

根据您上传的“ project.lock.json”,我认为这里的问题可能与System.IO.Compression 4.3.0 package有关。

在抛出异常的项目中,您可以找到它使用“ System.IO.Compression 4.3.0”,如下所示:

"runtime.native.System.IO.Compression/4.3.0": {
  "type": "package",
  "dependencies": {
    "Microsoft.NETCore.Platforms": "1.1.0",
    "Microsoft.NETCore.Targets": "1.1.0"
  },
  "compile": {
    "lib/netstandard1.0/_._": {}
  },
  "runtime": {
    "lib/netstandard1.0/_._": {}
  }
},
...
"System.IO.Compression/4.3.0": {
  "type": "package",
  "dependencies": {
    "System.Buffers": "4.3.0",
    "System.Collections": "4.3.0",
    "System.Diagnostics.Debug": "4.3.0",
    "System.IO": "4.3.0",
    "System.Resources.ResourceManager": "4.3.0",
    "System.Runtime": "4.3.0",
    "System.Runtime.Extensions": "4.3.0",
    "System.Runtime.Handles": "4.3.0",
    "System.Runtime.InteropServices": "4.3.0",
    "System.Text.Encoding": "4.3.0",
    "System.Threading": "4.3.0",
    "System.Threading.Tasks": "4.3.0",
    "runtime.native.System.IO.Compression": "4.3.0"
  },
  ...


在工作项目中,它使用“ System.IO.Compression 4.1.1”:

"runtime.native.System.IO.Compression/4.1.0": {
  "type": "package",
  "dependencies": {
    "Microsoft.NETCore.Platforms": "1.0.1",
    "Microsoft.NETCore.Targets": "1.0.1"
  },
  "compile": {
    "lib/netstandard1.0/_._": {}
  },
  "runtime": {
    "lib/netstandard1.0/_._": {}
  }
},
...
"System.IO.Compression/4.1.1": {
  "type": "package",
  "dependencies": {
    "System.Collections": "4.0.11",
    "System.Diagnostics.Debug": "4.0.11",
    "System.IO": "4.1.0",
    "System.Resources.ResourceManager": "4.0.1",
    "System.Runtime": "4.1.0",
    "System.Runtime.Extensions": "4.1.0",
    "System.Runtime.Handles": "4.0.1",
    "System.Runtime.InteropServices": "4.1.0",
    "System.Text.Encoding": "4.0.11",
    "System.Threading": "4.0.11",
    "System.Threading.Tasks": "4.0.11",
    "runtime.native.System.IO.Compression": "4.1.0"
  },
  ...


看来System.IO.Compression 4.3.0 package暂时不能在UWP项目中使用。当前,最新的稳定版本的“ Microsoft.NETCore.UniversalWindowsPlatform”包使用“ System.IO.Compression 4.1.1”包。通过添加System.IO.Compression 4.3.0 package,您应该能够在工作项目中重现您的问题,如下所示:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2",
    "System.IO.Compression": "4.3.0"
  },
  "frameworks": {
    "uap10.0": { }
  },
  "runtimes": {
    "win10-arm": { },
    "win10-arm-aot": { },
    "win10-x86": { },
    "win10-x86-aot": { },
    "win10-x64": { },
    "win10-x64-aot": { }
  }
}


因此,要解决此问题,建议您检查项目的引用,并确保没有“ System.IO.Compression 4.3.0”包。如果确实需要使用“ System.IO.Compression”包,则可以尝试将其降级为“ 4.1.1”。

关于c# - 解压缩会引发“无法正确加载基础压缩例程”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41185291/

10-11 16:24