Costura 未加载本机 Dll
Costura not loading Native Dll
我无法让 Costura 加载我的项目需要的本机 dll 运行。这是一个完整的本机 dll,因此它不是项目中的引用。
我已经将dll添加到我项目的costura32文件夹中,并将其设置为嵌入资源。
当我 运行 项目时,我可以看到 costura 已将 dll 提取到 %temp%\costuraD5629B8D94FC3E9B53C7AB358A0E123\native.dll
项目还是找不到文件,报错Unable to load DLL
在 procmon 中查看时,我可以看到它先在本地文件夹中查找文件,然后在 %temp%\costuraD5629B8D94FC3E9B53C7AB358A0E123\native.dll 中查找文件,但找不到。它似乎没有在“32”文件夹中寻找它。
我在配置文件 Unmanaged32Assemblies、PreloadOrder 中尝试了几个选项,但它们都有相同的结果。
我看不出我做错了什么。
在我的例子中,我尝试访问临时路径以使用以下代码设置库路径并且它有效。
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; }
}
我无法让 Costura 加载我的项目需要的本机 dll 运行。这是一个完整的本机 dll,因此它不是项目中的引用。
我已经将dll添加到我项目的costura32文件夹中,并将其设置为嵌入资源。
当我 运行 项目时,我可以看到 costura 已将 dll 提取到 %temp%\costuraD5629B8D94FC3E9B53C7AB358A0E123\native.dll
项目还是找不到文件,报错Unable to load DLL
在 procmon 中查看时,我可以看到它先在本地文件夹中查找文件,然后在 %temp%\costuraD5629B8D94FC3E9B53C7AB358A0E123\native.dll 中查找文件,但找不到。它似乎没有在“32”文件夹中寻找它。
我在配置文件 Unmanaged32Assemblies、PreloadOrder 中尝试了几个选项,但它们都有相同的结果。
我看不出我做错了什么。
在我的例子中,我尝试访问临时路径以使用以下代码设置库路径并且它有效。
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; }
}