好的,现在我会尝试尽可能地解释我的问题。我想在我的c#项目中使用流行的压缩算法7zip
已经有7zip的NuGet包
现在,当我安装7zip页面https://www.nuget.org/packages/SevenZipSharp/0.64.0时,它安装得很好但是当我尝试运行时它会出错
An unhandled exception of type 'SevenZip.SevenZipLibraryException' occurred in SevenZipSharp.dll
Additional information: Can not load 7-zip library or internal COM error! Message: failed to load library
所以我决定手动添加dll文件,我在下面得到这个错误
---------------------------
Microsoft Visual Studio
---------------------------
A reference to 'D:\51_doktora tez projesi\program_crawler\doktora_tez_projesi_crawler_program\ExternalDLLs\7z_9_38_2015_01_03.dll' could not be added. Please make sure that the file is accessible, and that it is a valid assembly or COM component.
---------------------------
OK
---------------------------
好的但是我找到了一个解决方案并且它的工作原理
首先安装nuget包
在开始调用函数设置路径之前
SevenZip.SevenZipExtractor.SetLibraryPath("SevenZipSharp.dll");
SevenZip.SevenZipCompressor.SetLibraryPath("SevenZipSharp.dll");
好的第二个问题也很有趣
我想使用最新版本的7zip DLL文件。所以从官方网站下载:https://sourceforge.net/projects/sevenzip/files/7-Zip/9.38/
安装了已下载的MSI并获得了64位dll文件。但是,当我尝试引用此文件时,它会失败并显示错误消息:Please make sure that the file is accessible, and that it is a valid assembly or COM component.
然而,诀窍再次起作用
我安装了NuGet 7zip包。然后在调用函数之前,我设置了这两行代码并使用最新版本的DLL文件
SevenZip.SevenZipExtractor.SetLibraryPath("ExternalDLLs/7z_9_38_2015_01_03.dll");
SevenZip.SevenZipCompressor.SetLibraryPath("ExternalDLLs/7z_9_38_2015_01_03.dll");
所以我正在寻找答案为什么会发生这些事情?为什么我不能直接添加DLL文件作为参考,但这个技巧有效吗?
Windows 8.1 64位,Visual Studio 2013更新3 WPF应用程序
答案 0 :(得分:2)
你问题的一部分很可能源于SevenZipSharp只是7z.dll的包装器这一事实,据我所知,这是一个c ++ dll。对于SevenZipSharp,项目page还提到可以使用任何兼容的dll并且需要指定:
SevenZipSharp需要一个7-zip本机库才能运行。您可以在编译时在LibraryManager.cs中指定7-zip dll(7z.dll,7za.dll等)的路径,在运行时指定app.config或通过SetLibraryPath()方法。 +" 7z.dll"是默认路径。对于64位系统,必须使用这些库的64位版本。 7-zip附带7z.dll,用于所有存档操作(通常是" Program Files \ 7-Zip \ 7z.dll")。 7za.dll是7z.dll的简易版,它只支持7zip档案。您甚至可以使用7-zip源构建您想要的格式的库。 SevenZipSharp将与他们一起工作。