我正在研究一种执行7z提取的混合模式exe。 我正在使用SevenZipExtractor并且需要指定7z lib路径,所以我添加了具有32 / 64bit dll的7z.Libs包,我想将它们嵌入到我的exe中。
如何使构建嵌入具有不同名称的相同名称dll? /bin/x86/7zxa.dll - > 7zxa_x86.dll /bin/x64/7zxa.dll - > 7zxa_x64.dll
所以我可以这样做:
SevenZipExtractor.SetLibraryPath(util.is_64bit_process ? "7zxa_x64.dll" : "7zxa_x86.dll");
我正在使用Fody / Costura加载其他dll,但无法弄清楚是否以及如何使用它来做我想要的事情。
另外,我真的不想强制直接(使用不同的名称)将dll添加到我的项目代码dirs(存储库问题)。
修改 我已将dll添加为项目的链接:
<ItemGroup>
<EmbeddedResource Include="..\packages\7z.Libs.15.12.0\bin\x86\7zxa.dll">
<Link>7z\x86\7zxa.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="..\packages\7z.Libs.15.12.0\bin\x64\7zxa.dll">
<Link>7z\x64\7zxa.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
dll确实嵌入了exe:
ystem.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()
[0] "xxx.g.resources" string
[1] "xxx.Properties.Resources.resources" string
[2] "xxx.version" string
[3] "xxx._7z.x86.7zxa.dll" string
[4] "xxx._7z.x64.7zxa.dll" string
[5] "costura.asyncbridge.net35.dll" string
[6] "costura.hardcodet.wpf.taskbarnotification.dll" string
[7] "costura.newtonsoft.json.dll" string
[8] "costura.sevenzipsharp.dll" string
[9] "costura.system.threading.dll" string
但是我仍然无法让SevenZip lib加载dll:
SevenZipExtractor.SetLibraryPath(util.is_64bit_process ? @"7z\x64\7zxa.dll" : @"7z\x86\7zxa.dll");
还尝试了@“_ _ 7z.x64.7zxa.dll”,如组件列表中所示,没有运气。
有什么建议吗?
答案 0 :(得分:0)
如果zip文件位于同一文件夹中,则无法将两个同名文件添加到zip文件中 - 但您可以将文件夹添加到zip文件中。
因此,如果您在zip文件中创建名为“x86”和“x64”的两个文件夹(比如说),那么您可以将dll添加到相关的dll中,您的代码将变为:
SevenZipExtractor.SetLibraryPath(util.is_64bit_process ? @"x64/7zxa.dll" : @"x86/7zxa.dll");