SevenZipSharp 的问题 7z.dll 库未找到甚至定义了 lib 的路径

问题描述

我正在创建 ASP.NET Web 应用程序。我需要在其中提取一些“7z”文件

我的代码

            SevenZipExtractor.SetLibraryPath(@"<some_path>\7z.dll");

            var zipExtractor = new SevenZipExtractor(zipPath);
            zipExtractor.ExtractArchive(path);

根据 SevenZipSharp 文档,SetLibraryPath 应该可以解决问题,但没有解决

在控制台应用程序中的测试期间,一切正常,但是当我尝试运行我的网络应用程序时,我收到“无法加载 7-zip 库或内部 COM 错误!消息:加载库失败。强>”。在控制台应用程序中它更容易,因为 dll 文件可以放在 Debug 文件夹中并且它可以工作。 Web 应用程序由 IIS Express 处理,我猜这就是问题所在。

解决方法

原来 7z.dll 需要在 IIS 创建的临时文件夹中。可以通过程序集访问它:

var assemblyDllPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"7z.dll");

使用它我们可以将原始的 7z.dll 复制到程序集目录并像这样设置 SevenZipSharp 库路径:

File.Copy(originalDllPath,assemblyDllPath,overwrite: true);
SevenZipBase.SetLibraryPath(assemblyDllPath);

请注意,覆盖设置为 true。这是因为有时组装恰好与之前相同。