SevenZipSharp 的问题。 7z.dll 找不到库甚至定义了 lib 的路径
Problem with SevenZipSharp. 7z.dll library not found even path to lib defined
我正在创建 ASP.NET Web 应用程序。我需要在其中提取一些“7z”文件。
我的代码:
SevenZipExtractor.SetLibraryPath(@"<some_path>z.dll");
var zipExtractor = new SevenZipExtractor(zipPath);
zipExtractor.ExtractArchive(path);
根据 SevenZipSharp 文档,SetLibraryPath 应该可以解决问题,但实际上并没有。
在控制台应用程序中进行测试时,一切正常,但是当我尝试 运行 我的 Web 应用程序时,我收到“无法加载 7-zip 库或内部 COM 错误!消息: 加载库失败。”。在控制台应用程序中它更容易,因为 dll 文件可以放在 Debug 文件夹中并且它可以工作。 Web 应用程序由 IIS Express 处理,我猜这是问题所在。
原来 7z.dll 需要在 IIS 创建的临时文件夹中。可以通过 Assembly 访问它:
var assemblyDllPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll");
使用它我们可以将原始 7z.dll 复制到程序集目录并像这样设置 SevenZipSharp 库路径:
File.Copy(originalDllPath, assemblyDllPath, overwrite: true);
SevenZipBase.SetLibraryPath(assemblyDllPath);
请注意覆盖设置为真。这是因为有时候组装恰好和之前的一样。
我正在创建 ASP.NET Web 应用程序。我需要在其中提取一些“7z”文件。
我的代码:
SevenZipExtractor.SetLibraryPath(@"<some_path>z.dll");
var zipExtractor = new SevenZipExtractor(zipPath);
zipExtractor.ExtractArchive(path);
根据 SevenZipSharp 文档,SetLibraryPath 应该可以解决问题,但实际上并没有。
在控制台应用程序中进行测试时,一切正常,但是当我尝试 运行 我的 Web 应用程序时,我收到“无法加载 7-zip 库或内部 COM 错误!消息: 加载库失败。”。在控制台应用程序中它更容易,因为 dll 文件可以放在 Debug 文件夹中并且它可以工作。 Web 应用程序由 IIS Express 处理,我猜这是问题所在。
原来 7z.dll 需要在 IIS 创建的临时文件夹中。可以通过 Assembly 访问它:
var assemblyDllPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll");
使用它我们可以将原始 7z.dll 复制到程序集目录并像这样设置 SevenZipSharp 库路径:
File.Copy(originalDllPath, assemblyDllPath, overwrite: true);
SevenZipBase.SetLibraryPath(assemblyDllPath);
请注意覆盖设置为真。这是因为有时候组装恰好和之前的一样。