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; }
    }