Костура не загружается 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; }
}