【发布时间】:2017-05-02 07:16:32
【问题描述】:
尝试使用以下代码在 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 表单(我认为这无关紧要)
问题: 有人遇到过同样的例外吗?它的根本原因是什么? 有哪些可用的解决方法? (我需要跨平台压缩文件)
更新:我按照要求创建了简单的测试项目(感谢您对其进行调查)。
解压缩在测试项目中有效,但它正在加载不同的模块。 Debug/Modules 窗口指出抛出异常的项目使用 System.IO.Compression.dll 4.06.24705.1,工作项目使用 1.00.24301.1。
我上传了两个 project.lock.json 文件以供比较https://1drv.ms/f/s!AqROiejT4oI3lL1q1tu3iJcfA2tKyg。
【问题讨论】:
-
对我来说,就像您使用的
zip库有一些依赖项存在于 Windows 10 的桌面版本中,而这些依赖项不存在于移动版本中 -
是的,我也这么认为,但是如果不是 ZipArchive api,诚实的 .NETer 应该使用什么? (这是 .NET 的一部分)
-
我一直使用 DotNetZip 库:github.com/haf/DotNetZip.Semverd
-
查看 GitHub 和 nuget 看起来它没有任何依赖项阻止它跨平台。我会试一试。谢谢
-
我无法重现您的问题。我正在使用与您的操作系统版本相同的 Lumia 640 进行测试。您是否尝试过使用 UWP 项目而不是 Xamarin Forms?如果您仍有问题,请分享minimal reproducible example,以便我们重现您的问题?
标签: c# .net zip compression uwp