我无法让Costura加载我的项目需要运行的本机dll。这是一个完整的本机dll,因此不是项目中的引用。
我已将dll添加到项目中的costura32文件夹中,并将其设置为嵌入式资源。
运行项目时,我可以看到costura已将dll解压缩到%temp%\ costura \ 1D5629B8D94FC3E9B53C7AB358A0E123 \ 32 \ native.dll
项目仍然无法找到文件,并显示错误消息:无法加载DLL
在procmon中查看时,我看到它在本地文件夹中然后在%temp%\ costura \ 1D5629B8D94FC3E9B53C7AB358A0E123 \ native.dll中查找文件,但找不到它。它似乎不在“ 32”文件夹中寻找它。
我在配置文件Unmanaged32Assemblies,PreloadOrder中尝试了几个选项,但是它们都具有相同的结果。
在这里我看不到我在做什么错
答案 0 :(得分:0)
在我的情况下,我尝试访问临时路径以使用以下代码设置库路径并且它起作用了。
private bool SetupSevenZipLibrary()
{
string costuraExtractionPath = null;
try
{
DirectoryInfo di = null;
string costuraTempPath = Path.Combine(
Path.GetTempPath(),
"Costura" //ex: Costura
);
di = new DirectoryInfo(costuraTempPath);
if (!di.Exists)
return false;
costuraExtractionPath = di.GetDirectories().First().FullName;
if (!Directory.Exists(costuraExtractionPath))
throw new Exception();
string sevenZipPath = Path.Combine(
costuraExtractionPath,
Environment.Is64BitProcess ? "64" : "32", "7z.dll"
);
if (!File.Exists(sevenZipPath))
throw new Exception();
SevenZipBase.SetLibraryPath(sevenZipPath);
return true;
}
catch { return false; }
}