尝试使用以下代码在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/