Costura未加载本机DLL

时间:2018-11-29 15:49:16

标签: c# fody-costura

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

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

运行项目时,我可以看到costura已将dll解压缩到%temp%\ costura \ 1D5629B8D94FC3E9B53C7AB358A0E123 \ 32 \ native.dll

项目仍然无法找到文件,并显示错误消息:无法加载DLL

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

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

在这里我看不到我在做什么错

1 个答案:

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