3

我无法让 Costura 加载我的项目需要运行的本机 dll。这是一个完整的本机 dll,因此它不是项目中的引用。

我已将 dll 添加到项目中的 costura32 文件夹中,并将其设置为嵌入式资源。

当我运行项目时,我可以看到 costura 已将 dll 提取到 %temp%\costura\1D5629B8D94FC3E9B53C7AB358A0E123\32\native.dll

该项目仍然无法找到错误无法加载DLL的文件

在 procmon 中查看时,我可以看到它在本地文件夹中查找该文件,然后在 %temp%\costura\1D5629B8D94FC3E9B53C7AB358A0E123\native.dll 中查找,但找不到它。它似乎没有在“32”文件夹中寻找它。

我在配置文件 Unmanaged32Assemblies、PreloadOrder 中尝试了几个选项,但它们都有相同的结果。

我看不出我在这里做错了什么。

4

1 回答 1

1

就我而言,我尝试使用以下代码访问临时路径以设置库路径,并且它有效。

   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; }
    }
于 2021-04-06T14:28:04.240 回答