Костура не загружается Native Dll

Я не могу заставить Costura загрузить нативный dll, необходимый для запуска моего проекта. Это полный родной dll, поэтому он не является ссылкой в ​​проекте.

Я добавил dll в папку costura32 в моем проекте и установил ее как встроенный ресурс.

Когда я запускаю проект, я вижу, что costura извлек dll в%temp%\costura\1D5629B8D94FC3E9B53C7AB358A0E123\32\native.dll

Проект все еще не может найти файл с ошибкой Невозможно загрузить DLL

При поиске в procmon я вижу, что он ищет файл в локальной папке, а затем в%temp%\costura\1D5629B8D94FC3E9B53C7AB358A0E123\native.dll и не может найти его. Кажется, он не ищет его в папке "32".

Я пробовал несколько вариантов в файле конфигурации Unmanaged32Assemblies, PreloadOrder, но все они имеют одинаковый результат.

Я не вижу, что я делаю здесь не так.

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; }
    }
Другие вопросы по тегам